GNU/Linux >> Linux Esercitazione >  >> Linux

Modo per dire a Logrotate di ignorare i file aperti?

Ho cercato un po' e non trovo nulla. Non voglio logrotate per toccare i file attualmente aperti. Stavo pensando di fare qualcosa con lsof ma non ho visto un modo per far sì che nessuno degli script interrompesse un'operazione. Qualche idea?

Risposta accettata:

Se hai nosharedscripts set (l'impostazione predefinita) e prerotate lo script esce con un errore sul file di registro interessato non verranno eseguite ulteriori azioni su di esso*.

Quindi, in teoria, potresti avere qualcosa del tipo (avviso, non testato):

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

quindi se lsof non riesco a trovare alcun processo con $logfile apri, il prerotate lo script uscirà con 1 e logrotate non intraprenderà alcuna azione su quel registro.

*Dal logrotate(8) pagina man su 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.

Questo può dipendere dal tuo logrotate versione, ma non riesco a trovare alcuna documentazione su quali versioni si comportano/non si comportano in questo modo.


Linux
  1. Registra qualsiasi comando simile a `time`?

  2. Come utilizzare Logrotate per gestire i file di registro

  3. 20 File di registro Linux che si trovano nella directory /var/log

  4. Rimuovi i file di registro usando cron job

  5. Come impostare i file aperti max nginx?

Come ruotare e comprimere i file di registro in Linux con Logrotate

Come gestire i file di registro utilizzando Logrotate in Linux

Configurazione di logrotate in Linux

Come installare Logrotate su Ubuntu 16.04 LTS

sintassi del file di configurazione logrotate:sono possibili più voci jolly?

Come posso sapere quali file ha aperto un processo?