sintaks file konfigurasi logrotate - beberapa entri wildcard mungkin?

83

Karena halaman manual tidak menjawab pertanyaan saya dan saya tidak ingin memaksakan siklus rotasi, saya memutuskan untuk mengajukan pertanyaan di sini.

Halaman manual untuk logrotate memberikan contoh berikut:

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail [email protected]
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

Semua contoh dengan wildcard hanya berisi satu entri. Sekarang, yang saya minati adalah apakah ini juga diizinkan:

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

Inilah alasannya: Saya memiliki beberapa vhosts dan saya membaginya dengan pengguna yang "memiliki" vhosts itu. Karena file-file log dapat dibaca oleh dunia, saya ingin mengikat-mount folder ke direktori home user, tetapi membatasi ke file-file log yang "dimiliki" pengguna, yang paling mudah dicapai dengan memisahkan log ke dalam folder (dan mengikat -mounting membutuhkan skema itu). Jadi saya sedang mencari solusi untuk memutar file log di bawah /var/log/httpdserta semua file log di bawah subdirektori dari direktori itu - tanpa harus mendaftar setiap subdirektori dengan nama.

Secara umum halaman manual tidak memberikan petunjuk apakah banyak entri dimungkinkan untuk aturan wildcard atau hanya untuk jalur penuh. Saya menggunakan logrotate versi 3.7.8-6 yang datang dengan Debian "Squeeze", tapi saya rasa ini belum tentu spesifik untuk versi distro atau program.

0xC0000022L
sumber

Jawaban:

119

Ya, Anda dapat menggunakan beberapa kartu liar. Anda dapat menguji file Anda tanpa melakukan rotasi sebenarnya dengan melakukan ini:

logrotate -d -f /etc/logrotate.conf
  • -d = Mengaktifkan mode debug. Dalam mode debug, tidak ada perubahan yang akan dilakukan pada log atau file status logrotate.

  • -f = Memberitahu logrotate untuk memaksakan rotasi, bahkan jika tidak menganggap ini perlu. Kadang-kadang ini berguna setelah menambahkan entri baru ke logrotate, atau jika file log lama telah dihapus dengan tangan, karena file baru akan dibuat, dan logging akan berlanjut dengan benar.`

Dennis Williamson
sumber
3
Terima kasih banyak! Baru mencoba dan berhasil. Tampaknya dari output bahwa wildcard dapat diharapkan berfungsi seperti di shell.
0xC0000022L
24

Saya hanya ingin mengklarifikasi, karena itulah yang saya dapatkan di sini, bagaimana melakukannya,

Beberapa file log diizinkan untuk ditentukan untuk konfigurasi tunggal, misalnya

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail [email protected]
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}
ThorSummoner
sumber
//, Apakah tidak ada masalah dengan jalur berbeda yang terjadi pada banyak baris?
Nathan Basanese
@NathanBasanese Saya tidak mengerti pertanyaan Anda sepenuhnya, saya pikir Anda bisa mengarahkan jalur path pada file di mana saja pada disk yang Anda suka, mereka tidak semua harus berada dalam awalan direktori yang sama.
ThorSummoner
@NathanBasanese oh, saya rasa saya mengerti, memiliki beberapa target rotasi log pada baris yang berbeda tampaknya menjadi penggunaan normal, saya menyalin formulir itu dari skrip logrotate.d lainnya, misalnya /etc/logrotate.d/rsyslog
ThorSummoner
4

Dari halaman manual untuk logrotate :

Perhatikan bahwa nama file log dapat dilampirkan dalam tanda kutip (dan bahwa tanda kutip diperlukan jika nama tersebut berisi spasi). Aturan mengutip shell normal berlaku, dengan ', ", dan \ karakter yang didukung.

Harap ingat untuk memodifikasi atau menghapus tanda kutip saat beralih dari satu pola ke beberapa pola:

Ini bekerja:

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

ini juga berfungsi:

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

Ini tidak bekerja:

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

dan tidak ada ini:

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

Bandingkan dengan case pola tunggal.

Ini bekerja:

'/var/log/*.log' {

dan ini juga berfungsi:

"/var/log/*.log" {

Diuji dengan logrotate 3.10.0

Piotr Dobrogost
sumber
2
Akan menarik untuk mengetahui apakah ini bekerja:"/var/space /log/*.log" "/var/log/*.blog"
KajMagnus