首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python-daemon不调用start函数

python-daemon不调用start函数
EN

Stack Overflow用户
提问于 2016-03-23 22:42:03
回答 1查看 621关注 0票数 0

我一直在遵循this example来实现一个python守护进程,它似乎在某种程度上起作用了,但只调用了reconfigure函数。

这是我一直在使用的代码:

代码语言:javascript
复制
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()

下面是manager类的代码:

代码语言:javascript
复制
@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')

日志中只显示:

代码语言:javascript
复制
INFO:root:Configuring program

由于某种原因,program_start()没有被调用。每次读取python文件时都会调用program_configure(),但为什么不调用program_start()呢?

我通过键入sudo service station.sh start来启动守护进程,运行脚本的代码行是:

代码语言:javascript
复制
python $DAEMON start

编辑:在读了一点之后,我意识到程序可能在context.__enter__() (with调用)中退出或挂起。但我不知道是什么导致了这一切

EN

回答 1

Stack Overflow用户

发布于 2016-03-24 18:48:49

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

当守护进程创建一个新进程时,它不会传输来自母进程的所有文件句柄-因此不会写入日志。有关详细信息,请参阅this question

解决方案是使用files_preserve属性,如下所示:

代码语言:javascript
复制
# 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],
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36181240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档