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