Domanda

Ho una serie di domande riguardanti l'avvio di uno script usando Pyinotify come daemon.

Ho qualche codice come questo:

#!/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
.

La mia domanda ora è se ho impostato il parametro dei demonizzazione su true significa che l'intero script è eseguito come daemon o è solo pyinotify?

Se è solo pyinotifica come vai a eseguire questo intero script come processo daemon?

Se eseguo lo script come daemon è davvero necessario rendere Pyinotify un daemon?

La mia ultima domanda è se Pyinotify è daemonizzato, avrei sicuramente bisogno di un callback?Nel mio caso voglio solo che lo script funzioni per sempre e essere ucciso solo sul riavvio del sistema / riavvio.

Lo script dovrebbe essere eseguito anche come qualsiasi script di avvio standard senza intervento manuale.

FYI,

Sto eseguendo un server Ubuntu 12.04.

Grazie in anticipo, NAV

È stato utile?

Soluzione

Gestisco un processo dipendente da iynotify come servizio di sistema (che è quello che vuoi, dal suono delle cose), utilizzando Upstart - anche su Ubuntu 12.04.

Personalmente, non ho modificato lo script Python a tutti .Ho appena fatto in modo che sia andato bene al terminale, quindi ha creato un file di configurazione aggiornato come:

/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"
.

Quando il tuo file di init è in grado, ti consigliamo di provare qualcosa come sudo start myservice, quindi ispezionare /tmp/myscript.log per eventuali errori.

HTH!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top