Logs

logrotate 是如何工作的?

  • January 18, 2020

我真的很難理解logrotate在我自己的 shell 文件中執行命令時是如何工作的,以及它是如何不工作的。

有問題的命令是:

rclone -L -vv --log-file "/home/mike/tmp/qqq.log"  sync "/media/mike/W10 D drive/My Documents/"  remote:MyDocuments_M17A_from_Linux

我想要什麼:

我希望經常檢查這個 qqq.log 文件,比如每 10 分鐘一次,看看它是否超過了給定的大小,比如 1 MB。如果有,旋轉文件。rclone使用該-vv選項會故意產生豐富的輸出(即試圖理解讓 logrotate 為這個案例工作)。

這裡有一個適度有用的教程,但它仍然讓我一無所知:

  1. 您打算如何配置來自您自己的非系統程序的日誌輪換?您是要在底部粘貼線條/etc/logrotate.conf嗎?這就是我所做的(在“#system-specific logs may be configured here”下):
/home/mike/tmp/qqq.log {
 notifempty
 size 1M
 daily
 create 0664 root root
 rotate 3
}

*後來:*我現在意識到您也可以將單個文件放入/etc/logrotate.d其中-那裡沒有太大的複雜性。 2. 是不是預設情況下logrotate每天只執行一次,憑藉文件/etc/cron.daily/logrotate? 3. 這是否意味著如果我想要更頻繁的檢查,我可能應該設置一個cron工作來執行此操作,每 10 分鐘執行一次(在此範例中)? 4. 你打算以logrotate <config file>root身份執行嗎?我問這個問題是因為我以 root 和使用者身份都嘗試過。使用者似乎沒有工作。

指向此類設置的初學者指南的連結(這種設置並不少見)會很有幫助。我已經搜尋過,但我發現的大部分內容都沒有為您提供分步指南。

logrotate可以作為普通使用者執行,無需管理權限,為該使用者輪換日誌。

# Create a local per-user configuration file
cat >.logrotate.conf <<'X'
/home/mike/tmp/qqq.log {
   notifempty
   missingok
   size 1M
   rotate 3
}
X

# Run logrotate with that configuration file
/usr/sbin/logrotate -v -s .logrotate.state .logrotate.conf

我刪除了您的daily標準,因為您想要純粹基於大小的檢查,這會將任何可能的操作限制為每天一次(每天第一次logrotate執行,因為它發生了)。我已替換create為,missingok以便由您的實際rclone工作來創建輸出文件而不是logrotate.

然後將logrotate命令放入您的使用者crontab文件中:

# Capture any existing crontab entries
crontab -l >.crontab

# Append ours to the list
echo '0 * * * * /usr/sbin/logrotate -s .logrotate.state .logrotate.conf >>.crontab.log 2>&1' >>.crontab

# Reload crontab
crontab .crontab

使用此範例,命令的輸出將被寫入.crontab.log,您可能需要一個logrotate條目以每月循環或重置它。

引用自:https://unix.stackexchange.com/questions/562611