Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Logrotate untuk membersihkan file yang dicap tanggal

Logrotate menghapus file sesuai urutan dalam daftar nama file log yang diurutkan secara leksikal, dan juga berdasarkan usia file (menggunakan waktu modifikasi terakhir dari file)

  • putar adalah jumlah maksimal file yang diputar, Anda mungkin menemukan. Jika ada lebih banyak file log yang diputar, namanya diurutkan secara leksikal dan yang terkecil secara leksikal dihapus.

  • maksimum mendefinisikan kriteria lain untuk menghapus file log yang diputar. File log apa pun yang diputar, yang lebih lama dari jumlah hari tertentu akan dihapus. Perhatikan, bahwa tanggal dideteksi dari waktu modifikasi terakhir file, bukan dari nama file.

  • format tanggal memungkinkan pemformatan khusus untuk tanggal dalam file yang diputar. Halaman manual mencatat, bahwa format akan menghasilkan penyortiran yang benar secara leksikal .

  • tanggal kemarin memungkinkan penggunaan tanggal dalam nama file log suatu hari nanti.

Untuk mempertahankan jumlah hari tertentu dalam file harian yang dirotasi (mis. 7), Anda harus menyetel rotate ke nilai 7 dan Anda dapat mengabaikan maxage , jika file Anda benar-benar dibuat dan dirotasi setiap hari.

Jika pembuatan log tidak terjadi selama beberapa hari, mis. selama 14 hari, jumlah file log yang dirotasi akan tetap sama (7).

maxage akan memperbaiki situasi dalam skenario "log tidak diproduksi" dengan selalu menghapus file yang terlalu lama. Setelah 7 hari tanpa produksi log, tidak akan ada file log yang dirotasi.

Anda tidak dapat menggunakan dateformat seperti yang ditunjukkan OP, karena tidak dapat diurutkan secara leksikal. Mengacau dengan dateformat mungkin akan mengakibatkan penghapusan file log yang diputar selain yang sebenarnya Anda inginkan.

Kiat :Jalankan logrotate dari baris perintah dengan -d opsi untuk menjalankan dry run:Anda akan melihat apa yang akan dilakukan logrotate tetapi sebenarnya tidak melakukan apa pun. Kemudian lakukan proses manual menggunakan -v (verbose) sehingga Anda dapat memastikan bahwa apa yang dilakukan adalah apa yang Anda inginkan.

Solusi:bersihkan log yang dibuat oleh cron

Konsepnya adalah:

Biarkan cron membuat dan memperbarui file log, tetapi buat sedikit modifikasi untuk membuat file, mengikuti logrotate nama file standar saat menggunakan dateext default

/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log

Gunakan logrotate hanya untuk menghapus file log yang terlalu lama

  • bidik file log yang tidak ada /data/tier2/scripts/logs/recover_standby_SID.log
  • gunakan missingok untuk membiarkan pembersihan logrotate terjadi
  • atur rotate cukup tinggi, untuk menutupi jumlah file log yang harus disimpan (setidaknya 7, jika akan ada satu file log "diputar" sehari, tetapi Anda dapat dengan aman mengaturnya sangat tinggi seperti 9999)
  • setel maxage to 7. Ini akan menghapus file yang memiliki waktu modifikasi terakhir lebih dari 7 hari.
  • dateext digunakan hanya untuk memastikan, penelusuran logrotate untuk file lama tampak seperti diputar.

Logrotate file konfigurasi akan terlihat seperti:

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 9999
    maxage 7
    dateext
}

Solusi:putar langsung dengan logrotate sekali sehari

Saya tidak yakin, bagaimana file siaga pemulihan sumber dibuat, tetapi saya akan berasumsi, Oracle atau beberapa skrip Anda secara teratur atau terus-menerus menambahkan ke file /data/tier2/scripts/logs/recover_standby_SID.log

Konsepnya adalah:

  • rotasi file sekali sehari dengan logrotate
  • bekerja secara langsung dengan file log yang berisi data pemulihan /data/tier2/scripts/logs/recover_standby_SID.log
  • daily akan menyebabkan rotasi sekali sehari (dalam hal bagaimana cron mengerti daily )
  • rotate harus disetel ke 7 (atau angka yang lebih tinggi).
  • maxage disetel ke 7 (hari)
  • dateext untuk menggunakan akhiran tanggal logrotate default
  • dateyesterday digunakan untuk menyebabkan sufiks tanggal dalam file yang dirotasi menjadi satu hari yang lalu.
  • missingok untuk membersihkan file lama meskipun tidak ada konten baru untuk dirotasi.

Konfigurasi logrotate akan terlihat seperti:

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 7
    maxage 7
    dateext
    dateyesterday
}

Perhatikan, bahwa Anda mungkin perlu sedikit bermain dengan copytruncate dan opsi serupa lainnya yang terkait dengan bagaimana file log sumber dibuat oleh proses eksternal dan bagaimana reaksinya terhadap tindakan rotasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menulis kueri penyisipan Oracle berparameter?

  2. cara mengambil, menghapus, komit dari kursor

  3. Nilai SQL MIN dari dua tabel

  4. Mengapa variabel Oracle plsql varchar2 membutuhkan ukuran tetapi parameter tidak?

  5. Pisahkan kolom menjadi beberapa baris