![系统日志轮换](https://linux22.com/image/503877/%E7%B3%BB%E7%BB%9F%E6%97%A5%E5%BF%97%E8%BD%AE%E6%8D%A2.png)
我编写了一个小型 c 应用程序,使用 syslog c 接口来写入消息(来自 man 3 syslog):
void openlog(const char *ident, int logopt, int facility);
void syslog(int priority, const char *message, ...);
void closelog(void);
我的问题:我正在向 中的 LOCAL0 写入消息/var/log/local0.log
。我还让 cron 在 上调用 logrotate /var/log/local0.log
。我注意到,在轮换之后,我的应用程序继续向轮换出的文件而不是新的 写入消息/var/log/local0.log
。
使用 postrotate 脚本修复此问题的最佳方法是什么?
简单,但并不理想:完全重新启动 rsyslog 守护进程。
在我的应用中发送并处理 SIGHUP。这似乎是最合适的解决方案。但我不确定收到 HUP 后我需要做什么。我是否只需要调用 closelog() 然后调用 openlog()?
答案1
另一个不错的解决方法,虽然不太适合您的情况,但可以“紧急”使用,即 logrotate 中的 copytruncate 选项。这意味着写入日志文件的任何内容都不需要通知。