題 logrotate配置文件語法 - 可能有多個通配符條目?


由於手冊頁沒有回答我的問題而且我不想強制輪換週期,所以我決定在這裡提出問題。

logrotate的手冊頁給出了以下示例:

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail www@my.org
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

帶通配符的所有示例僅包含一個條目。現在,我感興趣的是這個是否也被允許:

   /var/log/httpd/*.log /var/log/httpd/*/*.log {
       # ... same as above
   }

這是推理:我有多個虛擬主機,我將這些虛擬主機“擁有”的用戶將它們分開。由於日誌文件是世界可讀的,我想將文件夾綁定到用戶主目錄,但是將其限制為用戶“擁有”的日誌文件,這是通過將日誌分成文件夾最容易實現的(並且綁定)無論如何安裝需要這個方案。所以我正在尋找一種旋轉日誌文件的解決方案 /var/log/httpd 以及該目錄的子目錄下的所有日誌文件 -  必須按名稱列出每個子目錄。

通常,手冊頁不會提供任何關於通配符規則或僅適用於完整路徑的條目的線索。我正在使用Debian“Squeeze”附帶的logrotate版本3.7.8-6,但我認為這不一定特定於發行版或程序版本。


73
2018-03-10 21:09


起源




答案:


是的,你可以使用多張外卡。您可以通過執行以下操作來測試文件而不執行實際旋轉:

logrotate -d -f /etc/logrotate.conf
  • -d =打開調試模式。在調試模式下,不會對日誌或logrotate狀態文件進行任何更改。

  • -f =告訴logrotate強制旋轉,即使它沒有想到           這是必要的。有時這在添加新內容後很有用           要記錄的條目,或者是否已刪除舊的日誌文件           手,因為將創建新文件,並將記錄日誌           正確的


106
2018-03-10 22:08



非常感謝!剛試過,它的工作原理。從輸出中可以看出,通配符可以像在shell中一樣工作。 - 0xC0000022L


我只是想澄清一下,因為這就是我在這裡看到的怎麼做,

允許為單個配置指定多個日誌文件,例如

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail nobody@example.org
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}

15
2018-01-18 20:21



//,多行上出現不同路徑是否有問題? - Nathan Basanese
@NathanBasanese我完全不了解你的問題,我認為你可以將路徑行指向你喜歡的磁盤上的任何位置,它們都不必都在同一個目錄前綴中。 - ThorSummoner


從手冊頁 日誌輪播

請注意,日誌文件名可以用引號括起來(以及   如果名稱包含空格,則需要引號。正常的殼   引用規則適用,支持',“和\字符。

從單一模式到多種模式時,請記住修改或刪除引號:

這有效:

/var/log/*.log /var/log/*.blog {

這也有效:

/var/log/*.log
/var/log/*.blog {

這不起作用:

'/var/log/*.log /var/log/*.blog' {

這不是:

"/var/log/*.log /var/log/*.blog" {

與單一模式案例進行比較。

這有效:

'/var/log/*.log' {

這也有效:

"/var/log/*.log" {

用logrotate 3.10.0測試


2
2018-03-20 09:21



知道這是否有效會很有趣: "/var/space /log/*.log" "/var/log/*.blog" - KajMagnus