Avvio dello script usando Pyinotify come processo daemon
-
21-12-2019 - |
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
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!