【发布时间】:2016-03-23 14:42:03
【问题描述】:
我一直在关注this example来实现一个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() 没有被调用。
每次读取python文件时都会调用program_configure(),就是这样,但是为什么不调用program_start()呢?
我通过输入sudo service station.sh start 启动守护进程,运行脚本的行是:
python $DAEMON start
编辑:
读了一会儿,我意识到程序可能退出或挂在context.__enter__()(with 调用它)。但我不知道是什么原因造成的
【问题讨论】:
-
在您的终止时,您正在调用 fn:您有一组括号 () 而不是仅仅给出地址(在您的信号映射设置中)
-
你是对的!解决了这个问题,并编辑了问题。谢谢!
标签: python debian python-daemon