我一直在按照这个例子来实现一个 python 守护进程,它似乎有点工作,但只调用了 reconfigure 函数。
这是我一直在使用的代码:
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
,运行脚本的行是:
python $DAEMON start
编辑:读了一点之后,我意识到程序可能退出或挂起context.__enter__()
(with
调用)。但我不知道是什么原因造成的