GNU/Linux >> Belajar Linux >  >> Linux

Cara Memberitahu Logrotate Untuk Mengabaikan File yang Terbuka?

Saya telah mencari sedikit dan tidak dapat menemukan apa pun. Saya tidak ingin logrotate untuk menyentuh file yang sedang terbuka. Saya sedang berpikir untuk melakukan sesuatu dengan lsof tetapi saya tidak melihat cara untuk mendapatkan skrip apa pun untuk membatalkan operasi. Ada ide?

Jawaban yang Diterima:

Jika Anda memiliki nosharedscripts set (default), dan prerotate skrip keluar dengan kesalahan, file log yang terpengaruh tidak akan diambil tindakan lebih lanjut*.

Jadi, secara teori, Anda dapat memiliki sesuatu seperti (peringatan, belum diuji):

/var/log/application.log {
    nosharedscripts
    prerotate
        logfile=$1
        lsof $logfile >/dev/null
        exit $?
    endscript
    ...
}

jadi jika lsof tidak dapat menemukan proses apa pun dengan $logfile buka, prerotate skrip akan keluar dengan 1 , dan logrotate tidak akan mengambil tindakan apa pun pada log itu.

*Dari logrotate(8) halaman manual di linux.die.net:

nosharedscripts
Run prerotate and postrotate scripts for every log file which is rotated
(this is the default, and overrides the sharedscripts option). The absolute
path to the log file is passed as first argument to the script. If the
scripts exit with error, the remaining actions will not be executed for the
affected log only.
...
prerotate/endscript
The lines between prerotate and endscript (both of which must appear on
lines by themselves) are executed (using /bin/sh) before the log file is
rotated and only if the log will actually be rotated. These directives may
only appear inside a log file definition. Normally, the absolute path to
the log file is passed as first argument to the script. If sharedscripts is
specified, whole pattern is passed to the script. See also postrotate. See
sharedscripts and nosharedscripts for error handling.

Ini mungkin bergantung pada logrotate . Anda versi, tetapi saya tidak dapat menemukan dokumentasi tentang versi mana yang berperilaku/tidak berperilaku seperti ini.


Linux
  1. Adakah Cara Untuk Menyinkronkan Struktur Direktori Saat File Sudah Di Kedua Sisi?

  2. Perintah Untuk Membersihkan File Log Lama?

  3. Cara menggunakan Logrotate untuk mengelola file log

  1. 20 File Log Linux yang Terletak di Direktori /var/log

  2. Hapus file log menggunakan tugas cron

  3. Bagaimana cara mengatur file terbuka nginx max?

  1. Cara Mengelola File Log Menggunakan Logrotate Di Linux

  2. Catat Perintah Apa Saja yang Mirip dengan `waktu`?

  3. Logrotate:Memutar file non-log?