我们使用 upstart 在我们的 Ubuntu 服务器上管理我们的服务。他们产生的日志被登出到 /var/log/upstart/SERVICE_NAME.log
然后每天使用 12.04 LTS 附带的 logrotation 脚本轮换日志文件:
/var/log/upstart/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
Run Code Online (Sandbox Code Playgroud)
问题是,虽然 logrotate 移动文件,但它似乎没有向 upstart 发出关闭和重新打开文件的信号,让 upstart 进程写入删除 PID。
init 1 root 8w REG 202,1 64 2431 /var/log/upstart/dbus.log.1 (deleted)
init 1 root 13w REG 202,1 95 2507 /var/log/upstart/acpid.log.1 (deleted)
init 1 root 14w REG 202,1 127 17377 /var/log/upstart/whoopsie.log.1 (deleted)
init 1 root 36w REG 202,1 122 6747 /var/log/upstart/SERVICE_NAME.log.1 (deleted)
init 1 root 37w REG 202,1 30 6762
Run Code Online (Sandbox Code Playgroud)
显然,我可以将自己服务的输出重定向到其他日志文件,但问题仍然存在于系统进程中。此外,我宁愿不必建造比我需要的更多的基础设施。