系统日志轮换

系统日志轮换

我编写了一个小型 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 脚本修复此问题的最佳方法是什么?

  1. 简单,但并不理想:完全重新启动 rsyslog 守护进程。

  2. 在我的应用中发送并处理 SIGHUP。这似乎是最合适的解决方案。但我不确定收到 HUP 后我需要做什么。我是否只需要调用 closelog() 然后调用 openlog()?

答案1

另一个不错的解决方法,虽然不太适合您的情况,但可以“紧急”使用,即 logrotate 中的 copytruncate 选项。这意味着写入日志文件的任何内容都不需要通知。

相关内容