Ich habe die this example verfolgt, um einen Python-Daemon zu implementieren, und es scheint etwas zu arbeiten, aber nur die Rekonfigurationsfunktion aufgerufen wird.Python-Daemon ruft nicht die Startfunktion
Dies ist der Code, den ich verwendet habe:
import signal
import daemon
import lockfile
import manager
context = daemon.DaemonContext(
working_directory='/home/debian/station',
pidfile=lockfile.FileLock('/var/run/station.pid'))
context.signal_map = {
signal.SIGTERM: manager.Manager.program_terminate,
signal.SIGHUP: 'terminate',
signal.SIGUSR1: manager.Manager.program_reload_configuration,
}
manager.Manager.program_configure()
with context:
manager.Manager.program_start()
Dies ist der Code auf der Manager-Klasse:
@staticmethod
def program_configure():
logging.info('Configuring program')
@staticmethod
def program_reload_configuration():
logging.info('Reloading configuration')
@staticmethod
def program_start():
global Instance
logging.info('Program started')
Instance = Manager()
Instance.run()
@staticmethod
def program_terminate():
logging.info('Terminating')
und das Protokoll zeigt nur:
INFO:root:Configuring program
Aus irgendeinem Grund wird program_start()
nicht aufgerufen. program_configure()
wird jedes Mal aufgerufen, wenn die Python-Datei gelesen wird, also das ist, aber warum wird nicht program_start()
aufgerufen?
beginne ich den Dämon durch sudo service station.sh start
eingeben und die Linie, die das Skript ausgeführt ist:
python $DAEMON start
EDIT: Nach ein bisschen lesen, ich habe erkannt, dass das Programm wahrscheinlich verlässt oder hängt in context.__enter__()
(with
nennt das). Aber ich habe keine Ahnung, was das verursacht
auf Ihrer beenden Sie die fn anrufen: Sie den Satz von Pars haben(), anstatt nur die Adresse geben (in Ihrem Signal Map Setup) – pyInTheSky
Sie haben Recht! das behoben und die Frage bearbeitet. Vielen Dank! – Nitay