สคริปต์การตรวจสอบ test1.py เขียนใน Python ทำงานตลอดเวลาในขณะที่จริง เมื่อ SSH เป็นระยะไกล (โดยใช้เทอร์มินัลโป๊ว) มันจะเริ่มสคริปต์ด้วยคำสั่งต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
Python test1.py &
ตอนนี้สคริปต์กำลังทำงานตามปกติและคุณสามารถดูหมายเลขกระบวนการผ่าน PS ในเวลานี้คุณปิดเทอร์มินัล SSH โดยตรง (ไม่ได้ใช้คำสั่ง EXIT แต่ดำเนินการโดยตรงผ่านปุ่มปิดของ Putty) หลังจากเข้าสู่ระบบอีกครั้งคุณจะพบว่ากระบวนการออกไปแล้ว
ปัญหาได้รับการแก้ไขด้วยวิธีการเริ่มต้นพื้นหลัง นี่คือบทสรุปซึ่งสะดวกสำหรับฉันที่จะตรวจสอบในอนาคต
ทำงานในพื้นหลังภายใต้ Linux
ดำเนินการผ่านส้อม
ในสภาพแวดล้อม Linux กระบวนการ daemon ใน C ถูกนำไปใช้ผ่านทางส้อมและสามารถนำไปใช้กับวิธีนี้ได้ด้วยวิธีนี้ รหัสตัวอย่างมีดังนี้:
การคัดลอกรหัสมีดังนี้:
#!/usr/bin/env python
เวลานำเข้าแพลตฟอร์ม
นำเข้าระบบปฏิบัติการ
def funzionedemo ():
# นี่คือตัวอย่างฟังก์ชั่นธุรกิจเฉพาะ
fout = open ('/tmp/demone.log', 'w')
ในขณะที่จริง:
fout.write (time.ctime ()+'/n')
fout.flush ()
Time.sleep (2)
fout.close ()
def createdaemon ():
#กระบวนการ fork
พยายาม:
ถ้า os.fork ()> 0: os._exit (0)
ยกเว้น Oserror ข้อผิดพลาด:
พิมพ์ 'Fork #1 ล้มเหลว: %d ( %s)' %(error.errno, error.strerror)
OS._EXIT (1)
os.chdir ('/')
os.setsid ()
os.umask (0)
พยายาม:
pid = os.fork ()
ถ้า pid> 0:
พิมพ์ 'daemon pid % d' % pid
OS._EXIT (0)
ยกเว้น Oserror ข้อผิดพลาด:
พิมพ์ 'Fork #2 ล้มเหลว: %d ( %s)' %(error.errno, error.strerror)
OS._EXIT (1)
# มาตรฐานการเปลี่ยนเส้นทาง io
sys.stdout.flush ()
sys.stderr.flush ()
si = file ("/dev/null", 'r')
ดังนั้น = ไฟล์ ("/dev/null", 'a+')
se = file ("/dev/null", 'a+', 0)
os.dup2 (si.fileno (), sys.stdin.fileno ())
OS.DUP2 (So.fileno (), sys.stdout.fileno ())
os.dup2 (se.fileno (), sys.stderr.fileno ())
# ดำเนินการรหัสในกระบวนการเด็ก
funzionedemo () # ฟังก์ชันสาธิต
ถ้า __name__ == '__main__':
ถ้า platform.system () == "Linux":
CreateDaemon ()
อื่น:
OS._EXIT (0)
ดำเนินการผ่านพุ่งพรวด
แอปพลิเคชันสามารถห่อหุ้มลงในบริการของระบบผ่านทาง UPSTART และตัวอย่างที่สมบูรณ์จะถูกบันทึกไว้ที่นี่โดยตรง
1. เขียนสคริปต์ Python
การคัดลอกรหัสมีดังนี้:
[root@local t27]# cat test123.py
#!/usr/bin/env python
นำเข้าระบบปฏิบัติการเวลา
ในขณะที่จริง:
พิมพ์เวลาเวลา ()
Time.sleep (1)
2. เขียนไฟล์กำหนดค่า Upstat
การคัดลอกรหัสมีดังนี้:
[root@local t27]# cat /etc/init/miketest.conf
คำอธิบาย "การทดสอบของฉัน"
ผู้แต่ง "[email protected]"
เริ่มต้นที่ Runlevel [234]
หยุด Runlevel [0156]
chdir /test /t27
exec /test/t27/test123.py
เกิดใหม่
3. โหลดทางตอนเหนือของรัฐ
การคัดลอกรหัสมีดังนี้:
initctl reload-configuration
4. เริ่มบริการ
การคัดลอกรหัสมีดังนี้:
[root@local t27]# เริ่ม miketest
Miketest Start/Running ประมวลผล 6635
[root@local t27]# ps aux | grep test123.py
รูท 6635 0.0 0.0 22448 3716? SS 09:55 0:00 Python /test/t27/test123.py
รูท 6677 0.0 0.0 103212 752 PTS/1 S+ 09:56 0:00 GREP TEST123.PY
5. หยุดบริการ
การคัดลอกรหัสมีดังนี้:
[root@local t27]# หยุด miketest
Miketest หยุด/รอ
[root@local t27]# ps aux | grep test123.py
รูท 6696 0.0 0.0 103212 752 PTS/1 S+ 09:56 0:00 GREP TEST123.PY
[root@local t27]#
ดำเนินการผ่านสคริปต์ทุบตี
1. รหัส Python
การคัดลอกรหัสมีดังนี้:
[root@test local]# cat test123.py
#!/usr/bin/env python
นำเข้าระบบปฏิบัติการเวลา
ในขณะที่จริง:
พิมพ์เวลาเวลา ()
Time.sleep (1)
2. เขียนสคริปต์เริ่มต้น
การคัดลอกรหัสมีดังนี้:
[root@test local]# cat start.sh
- /bin/sh
Python Test123.py &
3. เริ่มกระบวนการ
การคัดลอกรหัสมีดังนี้:
[root@test local]#./start.sh
หากคุณใช้และเริ่มกระบวนการโดยตรง:
การคัดลอกรหัสมีดังนี้:
Python Test123.py &
ปิดเทอร์มินัล SSH โดยตรงจะทำให้กระบวนการออก
ดำเนินการผ่านหน้าจอ TMUX และวิธีอื่น ๆ
หากคุณเรียกใช้โปรแกรมชั่วคราวคุณสามารถเริ่มโปรแกรมผ่านหน้าจอหรือ TMUX นี่คือคำอธิบายว่า TMUX เริ่มต้นอย่างไร
1. เริ่ม tmux
ป้อน tmux ในเทอร์มินัลเพื่อเริ่มต้น
2. เริ่มโปรแกรมใน tmux
เพียงแค่เรียกใช้คำสั่งต่อไปนี้โดยตรง (ดูสคริปต์ด้านบน): Python test123.py
3. ปิดเทอร์มินัล SSH โดยตรง (เช่นปุ่มปิดบน Putty);
4. หลังจาก resshing ให้ดำเนินการคำสั่งต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
tmux แนบ
ตอนนี้คุณจะเห็นว่าโปรแกรม Python ยังคงดำเนินการตามปกติ
รันในพื้นหลังใต้ Windows
ฉันยังไม่ได้ศึกษาในเชิงลึกใน Windows วิธีที่ฉันมักจะใช้คือการปรับเปลี่ยนส่วนขยายของสคริปต์ Python เป็น ".pyw" และดับเบิลคลิกที่จะทำงานในพื้นหลังโดยไม่ต้องแก้ไขรหัสใด ๆ