Il mio nohup.out
file sta crescendo rapidamente.
Sto eseguendo un'applicazione in background, sta scrivendo un nohup.out
file,
ora ho bisogno di ruotare il nohup.out
file senza uccidere la mia applicazione. Può essere fatto?
Il mio nohup.out
file sta crescendo rapidamente.
Sto eseguendo un'applicazione in background, sta scrivendo un nohup.out
file,
ora ho bisogno di ruotare il nohup.out
file senza uccidere la mia applicazione. Può essere fatto?
Risposte:
Dovresti dare un'occhiata a flog in combinazione con logrotate
. Se si SIGHUP
esegue il pipe dell'output dell'applicazione in questo modo, è possibile eseguire il processo flog senza interrompere l'applicazione in esecuzione.
flog (file logger) è un programma che legge input da STDIN e scrive su un file.
Se si riceve SIGHUP, il file verrà riaperto, consentendo la rotazione del registro [vedere logrotate (8) su RH.]
Il file di registro verrà riaperto solo se flog rileva che si è verificata una rotazione (ovvero, se il vecchio file è andato o l'inode è cambiato). flog è estremamente piccolo (meno di 500 byte di memoria).
To save output to FILE, use 'nohup COMMAND > FILE'
Non puoi ruotarlo. Puoi troncarlo con il comando >nohup.out
, che eliminerà tutti i contenuti nel file.
È possibile copiare prima il file e poi troncarlo, se è necessario salvare l'output. Ma c'è una piccola finestra per una gara, in cui l'output può essere scritto dopo aver copiato il file ma prima di troncarlo. Qualsiasi output scritto durante quella finestra andrà perso per sempre.
copytruncate
in logrotate
. Ma nohup.out
raramente è il tipo di file che configureresti per ruotare un lavoro cron.
Non puoi.
È possibile scollegare il file (rm) ma i dati hanno ancora un footprint sul disco e continueranno a essere scritti fino a quando è presente un handle di file aperto.
È possibile rinominare il file, ma di nuovo ciò non impedisce che venga scritto (ma se si avvia regolarmente un processo in background, i più recenti scriveranno nello stesso file).
In realtà dovresti reindirizzare esplicitamente l'output del lavoro su qualcosa progettato per gestirlo (ad es. Rotatelog di apache ).
Non sono sicuro che sia troppo tardi per questo. Ma per gli altri che si imbattono in questo forum ora, non ho dovuto provare nulla con flog o altro.
Il mio lavoro inizia così:
nohup <my process> &
Questo inizia il mio lavoro e inizia ad aggiungere un nohup.out in quella directory.
Tutto quello che dovevo fare era impostare un logrotate che di solito viene fornito con la distribuzione e configurare qualcosa del genere in /etc/logrotate.conf
~/my abosolute path/nohup.out {
size 1024k
copytruncate
rotate 100
maxage 100
}
E ha funzionato !! nohup.out veniva troncato mentre otteneva i nuovi accodamenti sullo stesso file. Neanche il processo è morto. E un nuovo nohup.out come nohup.out-20190528
questo è stato creato.
Spero che sia di aiuto.
Logrotate ha un'opzione copytruncate disponibile, che tronca (svuota) il file specificato dopo che è stato copiato nel normale schema di rotazione (e compressione, se impostato).
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 can not 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 log-
ging data might be lost. When this option is used, the create
option will have no effect, as the old log file stays in place.
Dalla manpage logrotate .
Puoi fare qualcosa del genere:
cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out
Non è necessario uccidere la tua app.