我写了一个小的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);
我的问题是:我在/var/log/local0.log写消息给LOCAL0。 我也有cron在/var/log/local0.log上调用logrotate。 我注意到,在轮换之后,我的应用程序继续写入被轮换出来的文件,而不是新的/var/log/local0.log 。
用postrotate脚本解决这个问题的最好方法是什么?
容易,但不理想:完全重新启动rsyslog守护进程。
在我的应用程序中发送和处理SIGHUP。 这似乎是最合适的解决scheme。 但是我不确定当我得到HUP时我需要做什么。 我只需要调用closelog()然后openlog()?
发送SIGHUP到syslogd,而不是你的程序。
另一个体面的解决方法,这不太适合你的情况,但可以用于“捏”是logrotate中的copytruncate选项。 这意味着无论是写入日志文件,都不需要通知。