python服务执行FileIO时是否需要systemd forking?

时间:2017-01-27 15:57:44

标签: systemd

本文(https://news.ycombinator.com/item?id=9793466)说明了在systemd中稀疏地使用分叉。遵循这个建议我尝试以下python服务脚本:

import time

def run():
    with open("/tmp/pysystemd/svc.out","w") as f:
        while True:
            print("***")
            f.write("+++\n")
            time.sleep(0.5)

run()

使用以下systemd.service脚本:

[Unit]
Description=Simple zebra service
After=multi-user.target

[Service]
Type=Simple
#ExecStart = /usr/bin/python /tmp/pysystemd/svc.py > /tmp/pysystemd/std.out
ExecStart = /bin/bash -c '/usr/bin/python /tmp/pysystemd/svc.py > /tmp/pysystemd/std.out'
WorkingDirectory = /tmp/pysystemd

[Install]
WantedBy=multi-user.target

虽然创建了文件/tmp/pysystemd/std.out但它并不包含预期的输出...帮助赞赏。

1 个答案:

答案 0 :(得分:1)

您的输出问题可能是缓冲输出。我没有在程序中看到任何输出缓冲区刷新。

请参阅How to flush output of Python print?

此外,将输出重定向到您自己的日志文件并不是系统化的方法。如果您将标准输出和错误转为默认值,它们将在日记中,您可以使用journalctl -u my-service

获取它