Запуск скрипта с использованием 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 на наличие ошибок.

НТН!

Другие вопросы по тегам