Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在DaemonContext中定义pidfile在python中禁用记录器_Python_Logging_Daemon_Lockfile - Fatal编程技术网

在DaemonContext中定义pidfile在python中禁用记录器

在DaemonContext中定义pidfile在python中禁用记录器,python,logging,daemon,lockfile,Python,Logging,Daemon,Lockfile,我正在尝试用python创建一个守护进程服务,使用日志记录功能创建日志到文件的操作。 如果我将pidfile参数添加到daemon.DaemonContext构造函数中,则记录器不会将任何消息记录到logger.log文件中。但如果我去掉这个参数,一切都正常。 运行时没有任何错误。 有人知道为什么daemon.DaemonContext中的pidfile参数会禁用日志消息吗?我该如何解决这个问题 任何帮助都将不胜感激。谢谢 import signal import daemon import l

我正在尝试用python创建一个守护进程服务,使用日志记录功能创建日志到文件的操作。 如果我将pidfile参数添加到daemon.DaemonContext构造函数中,则记录器不会将任何消息记录到logger.log文件中。但如果我去掉这个参数,一切都正常。 运行时没有任何错误。 有人知道为什么daemon.DaemonContext中的pidfile参数会禁用日志消息吗?我该如何解决这个问题

任何帮助都将不胜感激。谢谢

import signal
import daemon
import lockfile
import logging
import logging.handlers

def run():

    logger = logging.getLogger("DaemonLog")
    logger.setLevel(logging.INFO)
    handler = logging.FileHandler('logger.log')
    handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
    logger.addHandler(handler)

    daemon_context = daemon.DaemonContext(
        working_directory='/opt/myDaemon',
        umask=0o002,
        pidfile=lockfile.FileLock('/var/run/myDaemon.pid'),
        files_preserve=[handler.stream]
    )
    daemon_context.signal_map = {
        signal.SIGTERM: terminate_collector,
        signal.SIGHUP: terminate_collector,
        signal.SIGABRT: terminate_collector
    }

    with daemon_context as context:
        while True:
            logger.info("log")
            func()
            time.sleep(PARAM_SLEEP)

if __name__ == "__main__":
    run()

我成功地解决了这个问题。问题是没有使用以下命令创建pidfile:

pidfile=lockfile.FileLock('/var/run/myDaemon.pid')
解决方案是使用daemon.pidfile模块而不是lockfile模块:

pidfile=daemon.pidfile.PIDLockFile('/var/run/myDaemon.pid')
完整代码解决方案:

import signal
import daemon
import daemon.pidfile
import lockfile
import logging
import logging.handlers

def run():

    logger = logging.getLogger("DaemonLog")
    logger.setLevel(logging.INFO)
    handler = logging.FileHandler('logger.log')
    handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
    logger.addHandler(handler)

    daemon_context = daemon.DaemonContext(
        working_directory='/opt/myDaemon',
        umask=0o002,
        pidfile=daemon.pidfile.PIDLockFile('/var/run/myDaemon.pid'),
        files_preserve=[handler.stream]
    )
    daemon_context.signal_map = {
        signal.SIGTERM: terminate_collector,
        signal.SIGHUP: terminate_collector,
        signal.SIGABRT: terminate_collector
    }

    with daemon_context as context:
        while True:
            logger.info("log")
            func()
            time.sleep(PARAM_SLEEP)

if __name__ == "__main__":
    run()