Logrotate tidak menghapus log lama

14

untuk beberapa alasan file log lama tidak dihapus. Contoh dengan apache

Apa yang dikatakan file conf:

$ cat /etc/logrotate.d/apache2
/var/log/apache2/*.log {
    weekly
    missingok
    rotate 2
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            /etc/init.d/apache2 reload > /dev/null
    endscript
}

Konten (yang dipangkas) dari folder log:

# ls /var/log/apache2/
access.log       error.log.26.gz                other_vhosts_access.log.20.gz  access-ssl.log.14.gz
access.log.1     error.log.27.gz                other_vhosts_access.log.21.gz  access-ssl.log.15.gz
access.log.2.gz  error.log.28.gz                other_vhosts_access.log.22.gz  access-ssl.log.16.gz
access.log.3.gz  error.log.2.gz                 other_vhosts_access.log.23.gz  access-ssl.log.17.gz
[...]

Sebenarnya ada banyak dari mereka:

# ls /var/log/apache2/ | wc -l
85

Perintah logrotate dengan --verbose memberi saya ini:

# /usr/sbin/logrotate --verbose  /etc/logrotate.conf
[...]
reading config file apache2
reading config info for /var/log/apache2/*.log
[...]
rotating pattern: /var/log/apache2/*.log  weekly (2 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
  log does not need rotating
considering log /var/log/apache2/error.log
  log does not need rotating
considering log /var/log/apache2/other_vhosts_access.log
  log does not need rotating
considering log /var/log/apache2/pbpdhg-ssl.log
  log does not need rotating
not running postrotate script, since no logs were rotated
[...]

Apa yang salah di sini? Log diputar tetapi tidak dihapus? Apa yang saya lewatkan?

SamK
sumber

Jawaban:

17

konfigurasi Anda mengatakan: rotate 2

itu berarti file log diputar 2 kali sebelum dihapus, jadi logrotate hanya peduli tentang 2 file.

Dugaan saya adalah bahwa konfigurasi telah diubah di beberapa titik, karena sebelumnya lebih banyak file log disimpan, mungkin itu seperti rotate 28. file-file lama ini harus Anda hapus secara manual.

johnshen64
sumber
Saya tidak bisa membuktikan jawabannya jadi saya kira itu benar. Namun saya tidak mengerti mengapa access.log.3.gzmasih ada.
SamK
2
Karena rotate 2 hanya menangani 2 file, yaitu .1.gz dan .2.gz, dan mengabaikan file lainnya.
johnshen64
1
Saya telah mengubah rotate 365 ke rotate 90, dan access.log.90.gz adalah perubahan terbaru sejauh ini. Access.log.91.gz telah dihapus (karena logrotate hanya menyimpan 90), tetapi bukan yang> 91. Jadi johnshen64 benar, Anda harus menghapus apa pun> 2.
Yvan
Berikut tip tentang cara menangani hal ini secara otomatis, yaitu melalui manajemen konfigurasi pada banyak server: serverfault.com/a/636883/9082
Martijn Heemels
-3

Log dengan sufiks .gz tidak dipertimbangkan karena Anda menentukan: /var/log/apache2/*.log

Jadi 2 .log dan semua file .gz tetap.

Untuk mengubah ini taruh di sana

/ var / log / apache2 / ** log * atau ekspresi reguler.

Neg88
sumber
Maaf hanya satu asterisk sebelum log
Neg88
2
Untuk masalah asterisk, Anda dapat mengedit posting Anda. Secara umum, mengapa menurut Anda jawaban yang diterima salah? logrotate menginginkan file nama dasar dan menangani penambahan .gz sesuai kebutuhan.
Law29
Jawaban ini sebenarnya berbahaya karena ada risiko dapat mengakibatkan file diputar berulang-ulang, setidaknya dengan beberapa versi logrotate. Ini akan memampatkan file pertama, kemudian mencocokkan file yang dikompresi dan terus memutarnya.
Richlv