Möglicherweise verliert er einige wertvolle Protokolleinträge zwischen diesen beiden von Ihnen vorgeschlagenen Vorgängen. Ich würde es nicht empfehlen.
Cleankod
Antworten:
5
Sie sollten einen Blick auf Flog in Kombination mit werfen logrotate. Wenn Sie Ihre Anwendungsausgabe durch diese leiten, können Sie SIGHUPden Auspeitschungsprozess ausführen, ohne Ihre laufende Anwendung beenden zu müssen.
flog (file logger) ist ein Programm, das Eingaben von STDIN liest und in eine Datei schreibt.
Wenn SIGHUP empfangen wird, wird die Datei erneut geöffnet, wodurch eine Protokollrotation ermöglicht wird [siehe Protokollrotation (8) auf RH.]
Die Protokolldatei wird nur wieder geöffnet, wenn Flog feststellt, dass eine Drehung stattgefunden hat (dh die alte Datei ist verschwunden oder der Inode wurde geändert). Flog ist extrem klein (weniger als 500 Byte Speicherbedarf).
Kann nohup anstelle von nohup.out eine Pipe verwenden?
Brian Minton
1
Sie können die Dateiumleitung (>) verwenden, um in eine andere Datei als nohup.out gemäß der Manpage To save output to FILE, use 'nohup COMMAND > FILE'
auszugeben
4
Sie können es nicht drehen. Sie können es mit dem Befehl abschneiden >nohup.out, der alle Inhalte in der Datei löscht.
Sie können die Datei zuerst kopieren und dann abschneiden, wenn Sie die Ausgabe speichern müssen. Es gibt jedoch ein kleines Fenster für ein Rennen, in dem die Ausgabe geschrieben werden kann, nachdem Sie die Datei kopiert, aber bevor Sie sie abgeschnitten haben. Alle während dieses Fensters geschriebenen Ausgaben gehen für immer verloren.
Ich glaube, dass das Abschneiden keinen Speicherplatz auf der Festplatte freigibt, bis das Dateihandle geschlossen wird.
Symcbean
@symcbean Dein Glaube ist falsch. Durch das Abschneiden der Datei wird der Speicherplatz sofort freigegeben.
Kasperd
Logrotate copytruncate sollte den Trick machen.
user9517
@Iain Die Schritte, die ich beschreibe, entsprechen copytruncatein logrotate. Dies nohup.outist jedoch selten die Art von Datei, für die Sie einen Cron-Job so konfigurieren würden, dass er rotiert.
Kasperd
2
Das kannst du nicht.
Sie können die Verknüpfung der Datei (rm) aufheben, aber die Daten haben immer noch einen Footprint auf der Festplatte und werden weiterhin beschrieben, solange ein offenes Dateihandle vorhanden ist.
Sie können die Datei umbenennen - dies verhindert jedoch nicht, dass in sie geschrieben wird (aber wenn Sie regelmäßig Hintergrundjobs starten, schreiben die neueren in dieselbe Datei).
Eigentlich sollten Sie die Ausgabe des Jobs explizit auf etwas umleiten, das dafür ausgelegt ist (z . B. Apache-Rotatelogs ).
Das hängt ganz davon ab, ob nohup zeilenweise an nohup.out angehängt wird oder ob ein Zeiger auf den Speicherort von nohup.out beibehalten wird. Ein Beispiel finden Sie unter serverfault.com/questions/221337/… .
Pepoluan
1
Logrotate verfügt über eine Copytruncate-Option, mit der Ihre angegebene Datei abgeschnitten (leer) wird, nachdem sie in das normale Rotationsschema (und ggf. die Komprimierung) kopiert wurde.
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.
Ich bin mir nicht sicher, ob ich zu spät dran bin. Aber für andere, die jetzt über dieses Forum stolpern, musste ich nichts mit Flog oder so ausprobieren.
Mein Job beginnt einfach so:
nohup <my process> &
Dadurch wird mein Job gestartet und an eine nohup.out in diesem Verzeichnis angehängt.
Alles, was ich tun musste, war, eine Logrotate einzurichten, die normalerweise mit der Distribution geliefert wird, und so etwas in zu konfigurieren /etc/logrotate.conf
Und es hat funktioniert!! nohup.out wurde abgeschnitten, während die neuen Anhänge an dieselbe Datei angehängt wurden. Der Prozess ist auch nicht gestorben. Und ein neues nohup.out wie nohup.out-20190528dieses wurde erstellt.
Antworten:
Sie sollten einen Blick auf Flog in Kombination mit werfen
logrotate
. Wenn Sie Ihre Anwendungsausgabe durch diese leiten, können SieSIGHUP
den Auspeitschungsprozess ausführen, ohne Ihre laufende Anwendung beenden zu müssen.quelle
To save output to FILE, use 'nohup COMMAND > FILE'
Sie können es nicht drehen. Sie können es mit dem Befehl abschneiden
>nohup.out
, der alle Inhalte in der Datei löscht.Sie können die Datei zuerst kopieren und dann abschneiden, wenn Sie die Ausgabe speichern müssen. Es gibt jedoch ein kleines Fenster für ein Rennen, in dem die Ausgabe geschrieben werden kann, nachdem Sie die Datei kopiert, aber bevor Sie sie abgeschnitten haben. Alle während dieses Fensters geschriebenen Ausgaben gehen für immer verloren.
quelle
copytruncate
inlogrotate
. Diesnohup.out
ist jedoch selten die Art von Datei, für die Sie einen Cron-Job so konfigurieren würden, dass er rotiert.Das kannst du nicht.
Sie können die Verknüpfung der Datei (rm) aufheben, aber die Daten haben immer noch einen Footprint auf der Festplatte und werden weiterhin beschrieben, solange ein offenes Dateihandle vorhanden ist.
Sie können die Datei umbenennen - dies verhindert jedoch nicht, dass in sie geschrieben wird (aber wenn Sie regelmäßig Hintergrundjobs starten, schreiben die neueren in dieselbe Datei).
Eigentlich sollten Sie die Ausgabe des Jobs explizit auf etwas umleiten, das dafür ausgelegt ist (z . B. Apache-Rotatelogs ).
quelle
Logrotate verfügt über eine Copytruncate-Option, mit der Ihre angegebene Datei abgeschnitten (leer) wird, nachdem sie in das normale Rotationsschema (und ggf. die Komprimierung) kopiert wurde.
Aus der Logrotate-Manpage .
quelle
Sie können so etwas tun:
Sie müssen Ihre App nicht beenden.
quelle
Ich bin mir nicht sicher, ob ich zu spät dran bin. Aber für andere, die jetzt über dieses Forum stolpern, musste ich nichts mit Flog oder so ausprobieren.
Mein Job beginnt einfach so:
Dadurch wird mein Job gestartet und an eine nohup.out in diesem Verzeichnis angehängt.
Alles, was ich tun musste, war, eine Logrotate einzurichten, die normalerweise mit der Distribution geliefert wird, und so etwas in zu konfigurieren
/etc/logrotate.conf
Und es hat funktioniert!! nohup.out wurde abgeschnitten, während die neuen Anhänge an dieselbe Datei angehängt wurden. Der Prozess ist auch nicht gestorben. Und ein neues nohup.out wie
nohup.out-20190528
dieses wurde erstellt.Hoffe das hilft.
quelle