Bagaimana saya mengonfigurasi logrotate untuk tidak menghapus file log saya setelah rotasi?

24

Ada cara untuk melakukan ini?

Guilherme
sumber
Bisakah Anda memberi tahu kami mengapa Anda ingin melakukan ini? Mungkin ada opsi lain ...
chmeee
Dalam kasus saya akan lebih baik untuk mengunduh log lama yang besar ke penyimpanan eksternal dan menyimpan yang baru di server. Jadi saya perlu pembagi log sederhana.
sekrett
2
Kasus penggunaan saya untuk konfigurasi ini adalah: Saya ingin menyimpan log saya selamanya, karena saya mungkin membutuhkannya untuk keperluan audit, TETAPI saya ingin file saya diputar sehingga log saat ini tidak tumbuh terlalu besar dan yang diputar dapat terkompresi - jika tidak, cadangan log ke server eksternal terlalu sulit, dan memeriksa file juga menjadi terlalu lambat.
Rudolf Mayer

Jawaban:

32

Di file logrotate.conf Anda (atau file logrotate.d yang sama), ubah baris yang bertuliskan "

rotate 10

(nomor Anda mungkin berbeda) ke nomor yang lebih besar. Itu akan memerintahkannya untuk menyimpan log selama berhari-hari. Anda bisa membuatnya 36500, yang akan bertahan selama 100 tahun.

jedberg
sumber
6
Ketika saya melakukan ini pada raspberry pi (raspian), itu membuatnya membeku setiap malam. Setelah saya mencoba menjalankan proses dan membuka file menggunakan konsol serial dan menemukan bahwa ia mencoba untuk mengubah nama 100000 file yang tidak ada. Jadi berhati-hatilah. Sayangnya saya tidak memiliki informasi lebih detail
Christian
0

Saya telah mencari ini untuk melakukan rotasi backup database saya setiap hari, mingguan dan bulanan; jadi saya memutar file setiap hari tetapi menyimpan file untuk melakukan rotasi mingguan, dan sama untuk rotasi tahunan.

Gunakan opsi salin. Dari manual:

copy

salin Buat salinan file log, tetapi jangan ubah aslinya sama sekali. Opsi ini dapat digunakan, misalnya, untuk membuat snapshot dari file log saat ini, atau ketika beberapa utilitas lain perlu memotong atau mengurai file. Ketika opsi ini digunakan, opsi buat tidak akan berpengaruh, karena file log lama tetap di tempatnya.

Feida Kila
sumber
Ini sama dengan komentar di bawah ini ( serverfault.com/a/50186/275485 ), dan tidak memberikan jawaban yang benar; salinan tidak berarti file lama Anda yang diputar tidak dihapus ..
Rudolf Mayer
-3

Menyisihkan titik bahwa rotasi melibatkan penghapusan ... ;-)

Sepertinya Anda cukup menambahkan kata 'salin' ke file yang sesuai (kemungkinan di /etc/logrotate.d). Misalnya, skrip logout apache2 akan terlihat seperti ini:

/var/log/apache2/*.log {
    mingguan
    missingok
    putar 52
    kompres
    delaycompress
    pemberitahuan
    salinan
    skrip yang dibagikan
    postrotate
        jika [-f "`. / etc / apache2 / envvars; echo $ {APACHE_PID_FILE: - / var / run / apache2.pid} `"]; kemudian
            /etc/init.d/apache2 reload> / dev / null
        fi
    naskah akhir
}

Cobalah itu, dan lihat apakah itu sesuai dengan yang Anda inginkan.

Justin Ellison
sumber
2
Dengan asumsi bahwa ia ingin file-file itu "diputar" tetapi tidak pernah menghapus file-file lama, ini tidak akan berhasil. Menambahkan "salin" ke stanza konfigurasi berarti file asli akan terus bertambah selamanya, tetapi akhirnya salinan yang lebih lama dari file tersebut akan dihapus. Seperti yang saya pahami, "copy" terutama berguna ketika Anda mengharapkan beberapa proses lain untuk memotong / menghapus yang asli.
Insyte
Tepat, itulah yang saya pikir dia minta. Dia secara khusus meminta cara untuk "tidak menghapus file log saya", bukan cara untuk "tidak menghapus arsip lama file log saya". Kurasa aku harus lebih waspada terhadap pertanyaan yang melibatkan hanya subjek dan tubuh tidak ;-)
Justin Ellison
2
Ungkapan "setelah rotasi" memberikan petunjuk.
Dijeda sampai pemberitahuan lebih lanjut.
4
"Menyisihkan titik bahwa rotasi melibatkan penghapusan ..." Tidak harus. Rotasi dapat melibatkan hanya mengompresi log lama dan menjaganya, yang sepertinya pertanyaan yang ditanyakan.
reflexiv