يقوم برنامج Test Test1.py المكتوب في Python طوال الوقت في حين أن True. عندما يكون SSH بعيد (باستخدام محطة المعجون) ، فإنه يبدأ البرنامج النصي مع الأمر التالي:
نسخة الكود كما يلي:
Python test1.py &
الآن يعمل البرنامج النصي بشكل طبيعي ، ويمكنك رؤية رقم العملية من خلال PS. في هذا الوقت ، يمكنك إغلاق محطة SSH مباشرة (عدم استخدام أمر الخروج ، ولكن قم بتنفيذه مباشرة من خلال زر إغلاق المعجون). بعد تسجيل الدخول مرة أخرى ، تجد أن العملية قد خرجت.
تم حل المشكلة من خلال طريقة بدء التشغيل الخلفية. فيما يلي ملخص ، وهو مناسب لي للتحقق منه في المستقبل.
يعمل في الخلفية تحت Linux
تم تنفيذها من خلال شوكة
في بيئة Linux ، يتم تنفيذ عملية الخفي في C من خلال الشوكة ، ويمكن أيضًا تنفيذ Python من خلال هذه الطريقة. رمز المثال هو كما يلي:
نسخة الكود كما يلي:
#!/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 CreateAemon ():
#عملية
يحاول:
إذا 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 () # demo وظيفة
إذا __name__ == '__main__':
إذا كان النظام الأساسي.
CreateAemon ()
آخر:
OS._EXIT (0)
نفذت من خلال upstart
يمكن تغليف التطبيق في خدمات النظام من خلال UPSTART ، ويتم تسجيل المثال الكامل هنا مباشرة.
1. اكتب البرامج النصية Python
نسخة الكود كما يلي:
[Root@Local T27]# Cat Test123.py
#!/usr/bin/env python
استيراد نظام التشغيل ، الوقت
بينما صحيح:
print time.time ()
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
Respawn
3. إعادة تحميل Upstate
نسخة الكود كما يلي:
initctl إعادة التحميل
4. ابدأ الخدمة
نسخة الكود كما يلي:
[Root@Local T27]# ابدأ Miketest
Miketest start/تشغيل ، العملية 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
ميكيست توقف/الانتظار
[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]#
تم تنفيذها من خلال نص Bash
1. كود بيثون
نسخة الكود كما يلي:
[ROOT@اختبار محلي]# cat test123.py
#!/usr/bin/env python
استيراد نظام التشغيل ، الوقت
بينما صحيح:
print time.time ()
time.sleep (1)
2. اكتب نص بدء التشغيل
نسخة الكود كما يلي:
[ROOT@اختبار محلي]# CAT Start.sh
#! /بن/ش
Python Test123.py &
3. ابدأ العملية
نسخة الكود كما يلي:
[ROOT@اختبار محلي]#./start.sh
إذا كنت تستخدم العملية وبدء العملية مباشرة:
نسخة الكود كما يلي:
Python Test123.py &
أغلق محطة SSH مباشرة سيؤدي إلى خروج العملية.
تم تنفيذها من خلال الشاشة و TMUX وطرق أخرى
إذا قمت بتشغيل البرنامج مؤقتًا ، فيمكنك بدء البرنامج من خلال الشاشة أو TMUX. فيما يلي وصف لكيفية بدء TMUX.
1. ابدأ tmux
أدخل tmux في المحطة للبدء
2. ابدأ البرنامج في TMUX
فقط قم بتنفيذ الأمر التالي (راجع البرنامج النصي أعلاه): Python test123.py
3. قم بإيقاف تشغيل محطة SSH مباشرة (مثل الزر الإغلاق على المعجون) ؛
4. بعد الانتعاش ، قم بتنفيذ الأمر التالي:
نسخة الكود كما يلي:
إرفاق tmux
يمكنك الآن أن ترى أن برنامج Python لا يزال ينفذ بشكل طبيعي.
تشغيل في الخلفية تحت Windows
لم أدرسها بعمق في Windows. الطريقة التي أستخدمها غالبًا هي تعديل تمديد البرنامج النصي Python إلى ".pyw" ، وانقر نقرًا مزدوجًا لتشغيل الخلفية دون تعديل أي رمز.