بدء البرنامج النصي باستخدام pyinotify كعملية خفية
-
21-12-2019 - |
سؤال
لدي عدد من الأسئلة بخصوص بدء البرنامج النصي باستخدام pyinotify كبرنامج خفي.
لدي بعض التعليمات البرمجية مثل هذا:
#!/usr/bin/env python
import sys
import pyinotify
import shutil
import glob
PACKAGES_DIR = '/var/my-packages'
PACKAGES_TEMP_DIR = '/var/www-data/package_temp'
wm = pyinotify.WatchManager()
mask = pyinotify.IN_MOVED_TO
class ProcessPackages(pyinotify.ProcessEvent):
def process_IN_MOVED_TO(self, event):
for directory in glob.glob(PACKAGES_TEMP_DIR + '/*'):
shutil.move(directory, PACKAGES_DIR)
handler = ProcessPackages()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch(PACKAGES_TEMP_DIR, mask)
try:
notifier.loop(daemonize=True, pid_file='/tmp/packages.pid', stdout='/tmp/stdout.txt')
except pyinotify.NotifierError, err:
print >> sys.stderr, err
سؤالي الآن هو إذا قمت بتعيين المعلمة daemonize على True، فهل هذا يعني أن البرنامج النصي بأكمله يتم تشغيله كبرنامج خفي أم أنه مجرد pyinotify؟
إذا كان الأمر يتعلق فقط بـ pyinotify فكيف يمكنني تشغيل هذا البرنامج النصي بأكمله كعملية خفية؟
إذا قمت بتشغيل البرنامج النصي كبرنامج خفي، فهل من الضروري حقًا إنشاء pyinotify كبرنامج خفي أيضًا؟
سؤالي الأخير هو إذا تم إضفاء الطابع الخفي على pyinotify، فهل سأحتاج بالتأكيد إلى رد اتصال؟في حالتي، أريد فقط أن يعمل البرنامج النصي إلى الأبد وأن يتم قتله فقط عند إعادة تشغيل/إعادة تشغيل النظام.
يجب أيضًا تشغيل البرنامج النصي مثل أي برنامج نصي قياسي لبدء التشغيل دون تدخل يدوي.
لعِلمِكَ،
أقوم بتشغيل خادم Ubuntu 12.04.
شكرا مقدما ، NAV
المحلول
أقوم بتشغيل عملية تعتمد على ipynotify كخدمة نظام (وهو ما تريده، حسب ما يبدو)، باستخدام Upstart - أيضًا على Ubuntu 12.04.
أنا شخصياً لم أقم بتعديل نص بايثون على الاطلاق.لقد تأكدت للتو من أن الأمر يعمل بشكل جيد على الجهاز، ثم قمت بإنشاء ملف تكوين مبتكر مثل:
/etc/init/myservice.conf:
description "MyService"
author "My Name"
start on runlevel [2345]
stop on runlevel [!2345]
# Automatically restart process if crashed
#respawn
exec su myuser -c "/usr/bin/python /path/to/myscript.py > /tmp/myscript.log 2>&1"
عندما يكون ملف init الخاص بك في مكانه الصحيح، ستحتاج إلى تجربة شيء مثل sudo start myservice
, ، ثم فحص /tmp/myscript.log عن أي أخطاء.
هث!