我有一个 python 应用程序,通过 systemd 运行时会出现错误,但通过命令行运行时不会出现错误。
python 应用程序利用多处理,每个进程都会定期将日志信息输出到 stdout。
运行大约一小时后,通过 journalctl 跟踪的日志输出变得损坏:日志消息的第一部分可见但被截断。
一个子进程大约每 5 分钟调用一次 Web 服务器,第一个小时内没有记录任何活动,然后突然出现过去一小时的所有输出。这对应于 #1 的开始时间。从对 Web 服务日志的检查来看,该进程在此期间成功进行了 5 分钟的调用。
当从命令行运行 python 程序时,都不会出现这些问题。
可能是什么原因?
这是我的 systemd 单元文件:
[Unit]
Description=Glowflye Service
After=network.target
StartLimitIntervalSec=0
[Service]
WorkingDirectory=/root/myapp
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/python /root/myapp/myapp.py
[Install]
WantedBy=multi-user.target
编辑:上面的问题#2 似乎与缓冲有关,因为当使用该-u
选项运行 python 时,子进程的输出如预期的那样在 journalctl 中实时可见。