Mon nohup.out
dossier se développe rapidement.
J'exécute une application en arrière-plan, elle écrit un nohup.out
fichier,
maintenant, je dois faire pivoter le nohup.out
fichier sans tuer mon application. Cela peut-il être fait?
Mon nohup.out
dossier se développe rapidement.
J'exécute une application en arrière-plan, elle écrit un nohup.out
fichier,
maintenant, je dois faire pivoter le nohup.out
fichier sans tuer mon application. Cela peut-il être fait?
Réponses:
Vous devriez jeter un œil au fouet en combinaison avec logrotate
. Si vous dirigez la sortie de votre application à travers cela, vous pouvez alors SIGHUP
le processus de fouet sans avoir à tuer votre application en cours d'exécution.
flog (enregistreur de fichiers) est un programme qui lit les entrées de STDIN et écrit dans un fichier.
Si SIGHUP est reçu, le fichier sera rouvert, permettant la rotation du journal [voir logrotate (8) sur RH.]
Le fichier journal ne sera rouvert que si Flog détecte que la rotation s'est produite (c'est-à-dire, l'ancien fichier a disparu ou l'inode a changé). le flog est extrêmement petit (moins de 500 octets de mémoire).
To save output to FILE, use 'nohup COMMAND > FILE'
Vous ne pouvez pas le faire pivoter. Vous pouvez le tronquer avec la commande >nohup.out
, qui supprimera tout le contenu du fichier.
Vous pouvez d'abord copier le fichier, puis le tronquer, si vous devez enregistrer la sortie. Mais il y a une petite fenêtre pour une course, où la sortie peut être écrite après avoir copié le fichier mais avant de le tronquer. Toute sortie écrite pendant cette fenêtre sera définitivement perdue.
copytruncate
in logrotate
. Mais nohup.out
c'est rarement le type de fichier que vous configurez pour faire tourner une tâche cron.
Tu ne peux pas.
Vous pouvez dissocier le fichier (rm) mais les données ont toujours une empreinte sur le disque et continueront d'être écrites tant qu'il y aura un descripteur de fichier ouvert.
Vous pouvez renommer le fichier - mais encore une fois cela ne l'empêche pas d'être écrit (mais si vous démarrez régulièrement des tâches d'arrière-plan, les plus récentes écriront dans le même fichier).
Vraiment, vous devriez explicitement rediriger la sortie du travail vers quelque chose conçu pour gérer cela (par exemple, les journaux de rotation apache ).
Je ne sais pas si je suis trop en retard à ce sujet. Mais pour ceux qui tombent sur ce forum maintenant, je n'ai pas eu à essayer quoi que ce soit avec du fouet ou quoi que ce soit.
Mon travail commence simplement comme ceci:
nohup <my process> &
Cela démarre mon travail et commence à s'ajouter à un nohup.out dans ce répertoire.
Tout ce que j'avais à faire était de configurer un logrotate qui vient généralement avec la distribution et de configurer quelque chose comme ça dans /etc/logrotate.conf
~/my abosolute path/nohup.out {
size 1024k
copytruncate
rotate 100
maxage 100
}
Et ça a marché !! nohup.out était tronqué lors de l'obtention des nouveaux ajouts sur le même fichier. Le processus n'est pas mort non plus. Et un nouveau nohup.out comme nohup.out-20190528
celui-ci a été créé.
J'espère que cela t'aides.
Logrotate a une option de copie tronquée disponible, qui tronquera (vide) votre fichier spécifié après qu'il a été copié dans le schéma de rotation (et de compression, si défini) normal.
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.
Depuis la page de manuel logrotate .
Vous pouvez faire quelque chose comme ça:
cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out
Vous n'avez pas besoin de tuer votre application.