Script de partida usando pyinotify como processo de daemon de
-
21-12-2019 - |
Pergunta
Tenho uma série de perguntas sobre como iniciar um script usando pyinotify como um daemon.
Tenho um código como este:
#!/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
A minha pergunta agora é se eu definida para o daemonize parâmetro para True, isto significa que todo o script é executado como um daemon ou é apenas pyinotify?
Se é só pyinotify como eu iria sobre a execução de todo esse script como um processo daemon?
Se eu executar o script como daemon, é realmente necessário para fazer pyinotify um daemon bem?
A minha última pergunta é se pyinotify é daemon, seria eu definitivamente preciso de um retorno de chamada?No meu caso eu só deseja executar o script para sempre e sendo mortos apenas na reinicialização do sistema/reiniciar.
O script também deve executar como qualquer padrão de script de inicialização sem intervenção manual.
FYI,
Estou executando o Ubuntu 12.04 server.
Obrigado antecipadamente, nav
Solução
Eu executar um ipynotify dependentes do processo como um serviço do sistema (que é o que você quer, o som das coisas), usando o Upstart - também no Ubuntu 12.04.
Pessoalmente, eu não modificar o script em python em todos os.Eu apenas fiz a certeza de que ele ficou bem no terminal, então criado um novo arquivo de configuração assim:
/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 o init arquivo está no lugar, você vai querer tentar algo como sudo start myservice
, e , em seguida, inspecionar /tmp/myscript.registo para os erros.
HTH!