我目前正在尝试将systemd单元用作网络服务器。目前,我的foo.service
文件如下所示:
[Unit]
Description=The Foo Web Server
[Service]
Type=simple
ExecStart=/opt/foo/.cabal-sandbox/bin/foo
[Install]
WantedBy=multi-user.target
该foo
可执行文件会自动将所有HTTP请求记录到stdout-这是经过充分测试的。但是,当我使用查看日志时journalctl -u foo
,只会得到如下输出:
...
May 06 17:46:57 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:46:57 localhost systemd[1]: Started Foo Web Server.
May 06 17:46:57 localhost systemd[1]: Starting The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Started The Foo Web Server.
May 06 17:47:08 localhost systemd[1]: Starting The Foo Web Server...
有人可以解释为什么它不记录所有stdout输出吗?我简要地看了这个先前的问题,但这没有帮助-但是它暗示了“ ...可能不适用于未使用完整 systemd的系统”的思路-Ubuntu 15.04会遇到这种情况?预先感谢您,对此将提供任何帮助!
1
确保您的进程没有缓冲输出。我遇到了类似的问题,并且通过禁用python脚本的输出缓冲解决了该问题。由于生成的日志记录数量不多,因此似乎没有日志记录,但是实际上,它还没有机会,因为所有日志记录仍收集在stdout输出缓冲区中。
—
2015年
试图解决这个问题。我的印象是systemd确实在缓冲。stdout在UNIX中是行缓冲的,但是systemd会做自己的事情,并缓冲更多(为了快速但可能没用)。
—
Velkan
我遇到了同样的问题,并且使用Python的print函数进行缓冲是问题所在!因为我使用的是Python 3,所以我只用了类似的方法
—
timbram
print('Hello World!', flush=True)
,就成功了!输出开始显示在journalctl中。