系統日誌輪換

系統日誌輪換

我編寫了一個小型 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.

使用後旋轉腳本解決此問題的最佳方法是什麼?

  1. 簡單,但不理想:完全重新啟動 rsyslog 守護程式。

  2. 在我的應用程式中發送和處理 SIGHUP。這似乎是最合適的解決方案。但我不確定獲得 HUP 後需要做什麼。我只需要先呼叫 closelog() 然後呼叫 openlog() 嗎?

答案1

另一個不錯的解決方法是 logrotate 中的 copytruncate 選項,它不太適合您的情況,但可以「在緊要關頭」使用。這意味著寫入日誌檔案的任何內容都不需要通知。

相關內容