私はthis exampleを実行してpythonデーモンを実装していますが、やや動作しているように見えますが、reconfigure関数だけが呼び出されます。python-daemonはstart関数を呼び出しません
これは私が使用してきたコードです:
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()
これは、マネージャークラスのコードです:
@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')
し、ログのみを示しています
INFO:root:Configuring program
何らかの理由でprogram_start()
が呼び出されていません。 program_configure()
は、pythonファイルが読み込まれるたびに呼び出されます。そのとおりですが、なぜprogram_start()
は呼び出されませんか?
私はsudo service station.sh start
を入力して、デーモンを起動し、スクリプトを実行する行は次のとおりです。with
(ビットを読んだ後、私はプログラムはおそらくcontext.__enter__()
に終了したりハングアップすることを実現しました :
python $DAEMON start
EDITそれを呼び出す)。しかし、私はこれを引き起こしている何かの手掛かりがありません
、あなたはFNを呼び出している:あなたは、括弧のセットを(持っている)だけではなく、アドレスを与える(自分の中シグナルマップの設定) – pyInTheSky
あなたはそうです!それを修正し、質問を編集しました。ありがとう! – Nitay