我正在尝试使用日志记录在python中创建一个守护程序服务,并使用log to file opption。 如果我将pidfile参数添加到daemon.DaemonContext构造函数,则logger不会将任何消息记录到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()
答案 0 :(得分:0)
我成功地解决了这个问题。问题是没有使用命令创建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()