logrotate 是如何工作的?
我真的很難理解
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 為這個案例工作)。這裡有一個適度有用的教程,但它仍然讓我一無所知:
- 您打算如何配置來自您自己的非系統程序的日誌輪換?您是要在底部粘貼線條
/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
條目以每月循環或重置它。