Ubuntu上的“守护进程” - 未能记录

时间:2016-03-31 21:29:07

标签: python linux bash daemon

我正在使用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

它成功启动了脚本并使其保持活动而没有问题。它还会在脚本被终止时记录,但不记录stdout中的任何print语句。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  • 完全阻止输出缓冲区的使用 - 效率不高
  • 仅允许输出缓冲区为一行。然后,每个换行将导致输出被刷新并变得可见
  • 使用logging注销 - 有时它会强制缓冲到你需要的东西。
  • 使用一些外部程序启动你的脚本 - 有些人正在使用黑客来控制输出缓冲区。

您应该找到一些有关输出缓冲区控制的SO问题和答案。其中一个是Disable output buffering,另一个建议使用unbuffer How to make output of any shell command unbuffered?