"Daemon" Ubuntu - 登录失败

"Daemon" on Ubuntu - Failure to Log

我正在使用 Daemon 生成我拥有的 python 脚本的守护进程。但是,日志似乎没有写入文件。我正在使用的简单 bash 脚本(为了便于阅读,此处采用了经过调整的格式):

if ! daemon --name atlas --running; then
    daemon --errlog /home/ubuntu/output.log 
    --dbglog /home/ubuntu/output.log 
    --output /home/ubuntu/output.log
    --stdout /home/ubuntu/output.log
    --stderr /home/ubuntu/output.log 
    --respawn 
    --name acme
    /home/ubuntu/acme.py
fi

它成功地启动了脚本并保持它没有问题。它还会记录脚本被终止的时间,但不会在标准输出中记录任何打印语句。

当脚本遇到异常时,它似乎会转储所有应该立即打印出来的历史日志数据。

您的输出缓冲区有问题。许多程序正在缓冲输出以获得一些性能,但在某些情况下它会延迟输出在日志中的可见性。

在以下情况下,您会在日志中看到一些内容:

  • 当输出缓冲区中的数据量达到一定大小并被刷新时
  • 当输出关闭时,例如当进程退出时。

你应该以某种方式强制你的脚本更快地刷新输出(例如打印到标准输出)。有几个选项:

  • 完全防止使用输出缓冲区 - 效率不高
  • 只允许输出缓冲到一行。然后每个换行符都会导致输出被刷新并变得可见
  • 使用 logging 注销 - 有时它会强制缓冲到您需要的内容。
  • 使用一些外部程序启动您的脚本 - 有些正在使用 hacks 控制输出缓冲区。

您将找到一些关于输出缓冲区控制的 SO 问题和答案。其中之一是 Disable output buffering, another one proposing usage of unbuffer How to make output of any shell command unbuffered?.