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

Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top