So erhalten Sie die Ausgabe eines laufenden Nohup-Prozesses, wenn Nohup.out gelöscht wird

1341
Dcoder

Auf meiner FreeBSD 8.4-Box läuft ein Nohup-Prozess. Anfangs habe ich mir die Ausgabe der Nohup-Konsolen-Nachrichten angesehen

tail -f nohup.out 

Ich habe jedoch versehentlich die Datei nohup.out gelöscht. Wie kann ich jetzt auf die Konsolenmeldungen zugreifen?

2

1 Antwort auf die Frage

1
Mikhail T.

Ja, obwohl die Datei noch vorhanden ist, solange ein Prozess sie geöffnet hält, weil sie unlink-ed war, ist sie nicht mehr zugänglich.

Wenn Sie die Nachrichten weiterhin anzeigen möchten, während sie generiert werden, können Sie sie ktracefür den Prozess aktivieren, der sie generiert:

% ktrace -p PID % kdump -l 

Das Obige listet alle Systemaufrufe auf, die durch den Prozess getätigt wurden, schreibt jedoch nicht nur an stdoutund stderrkann daher etwas überwältigend sein und / oder zusätzliche Filterung erfordern, um nur das zu erhalten, was Sie sehen möchten.

Wenn Sie eine Kopie der Datei wünschen, können Sie eines der Universal-Dienstprogramme verwenden, z. B. tsk_recoverüber den Port sysutils / sleuthkit . Die übliche Weisheit, nicht in das Dateisystem zu schreiben, das die versehentlich gelöschten Dateien enthält, die Sie wiederherstellen möchten, gilt nicht, da die Datei immer noch geöffnet ist.

Bei der Wiederherstellung wird jedoch eine Kopie der gelöschten Datei erstellt - alles, was später von demselben Prozess in die Datei geschrieben wird, wird nicht in der Kopie gespeichert.

Leider fällt mir nichts anderes ein ... Auf Solaris war ich einmal in der Lage, eine gelöschte Datei wiederherzustellen, die noch von einem Prozess geöffnet wurde /proc/PID/fd/..., aber procFS auf FreeBSD bietet keine solche Funktionalität ...

Laut dieser Antwort/proc/PID/fd würde die Methode auch unter Linux funktionieren, aber linuxfonts von FreeBSD bietet diese Funktion ebenfalls nicht an. Schade eigentlich ...