将日志从文件重定向到 Systemd 日志

将日志从文件重定向到 Systemd 日志

我有一个由 systemd service 启动的程序myprogram.service。问题是它直接将日志写入日志文件/opt/myprogram/logs.txt。我想将其日志重定向到 systemd 日志中,这样我就可以使用journalctl.

是否可以修改myprogram.service以告诉 Systemd 将文本从特定文件传输到其日志中?

答案1

首先,我会尝试将tail和结合起来logger

tail -f /opt/myprogram/logs.txt | logger

tail将连续从文件中读取所有新行并将它们复制到标准输出中。记录器会将这些行发送到系统日志。

编辑:

由于管道正在进行缓冲,记录器有可能会休眠一段时间(直到 4Kb 的默认缓冲区填满)。这可以通过使用stdbuf或禁用缓冲来解决unbuffer

stdbuf -i0 -o0 tail -f /opt/myprogram/logs.txt | logger

答案2

如果您无法更改应用程序中的输出文件名,也许您可​​以强制创建/opt/myprogram/logs.txt/dev/stdout服务单元中的符号链接,作为启动前或启动后步骤或两者兼而有之?

  • 这也可能取决于/dev/stderr您的需要。

相关内容