systemd 停止写入标准输出文件

systemd 停止写入标准输出文件

systemd在 Ubuntu 20.04 上有一个简单的服务,我在其中指定了以下内容: StandardOutput=file:/var/log/appname/console.log

当我第一次启动该服务时,文件被创建,我在文件中看到了应用程序的输出。但是,该文件只会写入一次。当我重新启动服务时,即使应用程序正在运行,也不会向文件写入任何内容。如果我删除该文件并重新启动服务,该文件会再次出现,但同样,它只会写入一次。

为什么会发生这种情况?我应该使用不同形式的标准输出重定向吗?

答案1

我在 Ubuntu 20.04 中遇到了同样的问题,但内容实际上是写在文件的开头,这使得它对命令不可见tail。正如 @steeldriver 所指出的,这种行为是预期的,并在文档中进行了描述。

这个问题也在这里讨论:https://github.com/systemd/systemd/issues/8983

解决方案2021 年 3 月 30 日发布version 248

truncate:path与上面类似file:path,但它在打开文件时截断文件。

解决方法:

ExecStartPre=/usr/bin/truncate --size=0 FILEPATH

参考文献:

相关内容