Il peut perdre quelques précieuses entrées de journal entre ces deux opérations que vous avez suggérées. Je ne le recommanderais pas.
Cleankod
Réponses:
6
Vous devriez jeter un œil au fouet en combinaison avec logrotate. Si vous dirigez la sortie de votre application à travers cela, vous pouvez alors SIGHUPle 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).
Nohup peut-il utiliser un tuyau au lieu de nohup.out?
Brian Minton
1
Vous pouvez utiliser la redirection de fichiers (>) pour sortir vers un fichier autre que nohup.out selon la page de manuel:To save output to FILE, use 'nohup COMMAND > FILE'
jas_raj
4
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.
Je pense que la troncature ne libérera pas d'espace sur le disque tant que le descripteur de fichier n'est pas fermé.
symcbean
@symcbean Votre opinion est incorrecte. La troncature du fichier libère immédiatement l'espace.
kasperd
Logrotate copytruncate devrait faire l'affaire.
user9517
@Iain Les étapes que je décris sont équivalentes à copytruncatein logrotate. Mais nohup.outc'est rarement le type de fichier que vous configurez pour faire tourner une tâche cron.
kasperd
2
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 ).
Cela dépend totalement de si nohup s'ajoute à nohup.out ligne par ligne, ou s'il maintient un pointeur vers l'emplacement de nohup.out. Voir serverfault.com/questions/221337/… pour un exemple.
pepoluan
2
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
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-20190528celui-ci a été créé.
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.
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 alorsSIGHUP
le processus de fouet sans avoir à tuer votre application en cours d'exécution.la source
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.
la source
copytruncate
inlogrotate
. Maisnohup.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 ).
la source
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:
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
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.
la source
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.
Depuis la page de manuel logrotate .
la source
Vous pouvez faire quelque chose comme ça:
Vous n'avez pas besoin de tuer votre application.
la source