【问题标题】:python-daemon doesn't call the start functionpython-daemon 不调用启动函数
【发布时间】: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


【解决方案1】:

问题不在于 python-daemon 没有调用函数,而是日志记录不起作用。

当守护进程创建一个新进程时,它不会从母进程传输所有文件句柄 - 因此不会写入日志。请参阅this question 了解更多信息。

解决方案是像这样使用files_preserve 属性:

# Set the logger
LOG_LEVEL = logging.DEBUG
logger = logging.getLogger()
logger.setLevel(LOG_LEVEL)
fh = logging.FileHandler(LOG_FILENAME)
logger.addHandler(fh)

# Not create the context, and notify it to preserve the log file
context = daemon.DaemonContext(
    working_directory='/home/debian/station',
    pidfile=lockfile.FileLock('/var/run/station.pid'),
    files_preserve=[fh.stream],
)

【讨论】:

    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多