私は、syslog c インターフェースを使用してメッセージを書き込む小さな 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
。また、 で logrotate を呼び出す cron も使用しています/var/log/local0.log
。ローテーション後、アプリが新しい ではなく、ローテーションされたファイルに書き込みを続けていることに気付きました/var/log/local0.log
。
これを postrotate スクリプトで修正する最善の方法は何ですか?
簡単ですが、理想的ではありません。rsyslog デーモンを完全に再起動します。
アプリで SIGHUP を送信して処理します。これが最も適切な解決策のようです。しかし、HUP を取得したときに何をする必要があるかわかりません。closelog() を呼び出して、次に openlog() を呼び出すだけでよいのでしょうか?
答え1
もう 1 つの適切な回避策は、状況に完全には適合しないものの、「緊急時に」使用できる logrotate の copytruncate オプションです。これは、ログ ファイルに書き込む内容に通知する必要がないことを意味します。