Ruota un file che è aperto e che viene sempre scritto


10

Ho un'applicazione Linux che scrive continuamente le informazioni di registrazione in un file di registro, ad es. /var/log/application.log. Poiché l'applicazione non ruota automaticamente il file, questo file di registro può raggiungere una dimensione di gigabyte in alcune settimane, quindi voglio essere in grado di ruotare correttamente questo file

La mia preoccupazione principale qui è che per ruotare un file aperto dall'applicazione in ogni momento, probabilmente dovrò:

  1. Sposta il file nella sua forma ruotata /var/log/application.log -> /var/log/application.log.2013-01-28

  2. Crea un vuoto /var/log/application.log. Obs: A questo punto il processo di candidatura sta ancora scrivendo/var/log/application.log.2013-01-28

  3. Modificare il descrittore di file del processo dell'applicazione in modo che punti nuovamente /var/log/application.log

Quindi ho ragione? In tal caso, come posso farlo? (principalmente la modifica della parte descrittore di file)

Se non lo sono, qual è il modo corretto e come farlo?


Devi cancellare il file o semplicemente ruotarlo?
ewwhite,

Quale applicazione? L'applicazione deve fornire supporto per farlo correttamente. (Altrimenti, puoi fare una cosa molto brutta: allega al processo, apri il nuovo file, dup2il nuovo descrittore su quello vecchio, quindi chiudi il nuovo descrittore.)
David Schwartz,

Approccio interessante Schwartz. Sono curioso di vederlo in azione e ci giocherò un po '. Ad ogni modo, l'applicazione è in casa e sto cercando una soluzione più generale. Mi piace la risposta di kormoc tra l'altro
Bruno Polaco,

@ewwhite Ho bisogno di ruotarlo, non posso permettermi di perdere i dati del registro
Bruno Polaco,

Risposte:


11

Scrivi una logrotateconfigurazione da usarecopytruncate

copytruncate
    Truncate the original log file in place after creating a copy, instead of moving the 
    old log file and optionally creating a new one. It can be used when some program
    cannot be told to close its logfile and thus might continue writing (appending) to
    the previous log file forever. Note that there is a very small time slice between
    copying the file and truncating it, so some logging data might be lost. When this
    option is used, the create option will have no effect, as the old log file stays
    in place.

Interessante, troncare il file dopo averlo copiato sembra abbastanza intelligente, anche con il margine di perdita di dati. Non ho notato questa opzione su logrotate. Grazie per l'intuizione :)
Bruno Polaco,

1

La maggior parte di tali applicazioni risponde a un segnale, ad esempio SIGHUP, e chiuderà e riaprirà i propri file di registro alla ricezione del segnale. Controllare la documentazione dell'applicazione per il segnale corretto da inviare.


E in caso contrario, è possibile riavviare l'applicazione come fallback. Questo è ciò che fa di solito syslog e molti altri programmi.
lsd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.