Hil*_*kus 14 logs logrotate systemd
我有一个由 systemd 管理的服务,它具有以下 systemd 配置,告诉 systemd 将日志直接写入文件(没有 syslog 或任何内容)
StandardOutput=file:/var/log/foo/my.log
Run Code Online (Sandbox Code Playgroud)
我有一个 logrotate 规则
/var/log/foo/*.log
{
rotate 31
daily
missingok
notifempty
compress
delaycompress
sharedscripts
}
Run Code Online (Sandbox Code Playgroud)
发生的情况是日志正在轮换,但服务仍在写入旧的轮换文件,而新日志文件仍为空。
我有一个类似的工作设置,其中服务写入系统日志。这个工作正常,因为 logrotate 配置有
postrotate
invoke-rc.d rsyslog rotate > /dev/null
Run Code Online (Sandbox Code Playgroud)
,它通知 syslog 它的日志已被轮换。
问题是,在我有问题的情况下,日志直接发送到文件,因此我不知道是否(或哪一个)需要向 systemd 或实际服务进程发送类似的信号。
我copytruncate在 logrotate 中找到了这个选项,我很确定它会解决我的问题,但我感觉这不是理想的方法,否则copytruncate将是 logrotate 的默认行为。
我该如何解决这个问题?我需要向 systemd 发送一些信号吗?我需要向服务进程发送一些信号吗?我必须copytruncate在 logrotate 中使用吗?
如果重要的话,该服务是一个使用 logback 写入 stdout 的 java 进程
小智 10
copytruncate在这种情况下是正确的答案。它不是默认值,因为很少需要它,因为您有一个适当的守护进程,您可以发出信号以重新打开日志文件。
另一种方法是在轮换后脚本中重新启动服务,但这可能不方便或不理想。
| 归档时间: |
|
| 查看次数: |
8050 次 |
| 最近记录: |