Запуск скрипта с использованием pyinotify в качестве процесса демона
У меня есть несколько вопросов, касающихся запуска скрипта с использованием 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 будет мне нужен обратный вызов? В моем случае я просто хочу, чтобы скрипт работал вечно и был убит только при перезагрузке / перезагрузке системы.
Скрипт также должен запускаться как любой стандартный скрипт запуска без ручного вмешательства.
FYI,
Я использую сервер Ubuntu 12.04.
Заранее спасибо
1 ответ
Я запускаю процесс, зависящий от ipynotify, как системную службу (что вам нужно, по звуку вещей), используя Upstart - также в Ubuntu 12.04.
Лично я вообще не модифицировал скрипт на python. Я просто убедился, что он нормально работает в терминале, а затем создал файл конфигурации upstart примерно так:
/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"
Когда ваш файл инициализации на месте, вы захотите попробовать что-то вроде sudo start myservice
, затем проверьте /tmp/myscript.log на наличие ошибок.
НТН!