我有一个由 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
您的需要。