Daemontools shell脚本记录到multilog

时间:2016-05-24 21:52:26

标签: python shell

我有以下shell脚本:

#!/bin/sh
exec 2>&1
echo "Starting ..."
python /home/services/example.py

python脚本只包含一个打印命令。上面的脚本是一个daemontools守护程序,并且还启用了一个简单的日志机制(multilog)。但是,在main/log/current中我看到了“Starting ...”行,但没有看到python脚本中的打印命令。

我在通话时做错了还是忘记了什么?

修改 我试图运行的python脚本是:

from time import sleep
import sys

sys.stdout.write("Hello World")
print "Hello World"

while 1:
    sys.stdout.write("Hello world")
    sleep(10)

2 个答案:

答案 0 :(得分:0)

反复运行

sys.stdout.write("Hello world")

...只创建一个Hello worldHello worldHello world形式的巨大行,但不保证它会刷新。

在您编写的任何内容上隐藏新内容(如print所示),并在直接使用sys.stdout.write()时刷新缓冲区:

while 1:
    sys.stdout.write("Hello world\n")  # add a newline
    sys.stdout.flush()                 # flush the buffer

答案 1 :(得分:0)

我也遇到了同样的问题。

解决方案是禁用输出缓冲。见Disable output buffering

在您的情况下,将您的daemontools运行脚本更新为:

python -u /home/services/example.py

-u标志禁用Python输出缓冲。