无法将STDOUT重定向到Python守护程序中的文件作为Linux服务

时间:2018-03-13 10:54:07

标签: python linux stdout daemon

在Python守护进程中,我使用two-fork mode将STDOUT和STDERR重定向到某个文件:

os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())

启动守护程序,STDOUT可以重定向到/var/demo/stdout中的指定文件。

但是如果我通过Systemd将守护进程模块作为Linux服务,那么服务文件就像:

[Unit]
Description=demo
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/demo/
ExecStart=/bin/bash -c '/anaconda3/bin/python3 -m scheduler.run start'
PIDFile=/var/run/demo.pid
SyslogIdentifier=Demo
User=root

[Install]
WantedBy=multi-user.target

STDOUT似乎没有重定向到文件/var/demo/stdout。 设置为分叉 ExecStart 命令的服务类型已经过测试,可以按预期工作。

所以唯一的问题是,如果Python模块作为Linux服务运行,STDOUT无法重定向到普通文件。

0 个答案:

没有答案