Wie bekomme ich nohup.out öfter gespült?

7

Unter Ubuntu 10.04 habe ich ein langes Python-Programm, das eine Reihe von Ausgaben druckt. Ich führe dies unter "nohup" aus. Es wartet jedoch bis zum Ende, bis der gesamte Text in nohup.out eingefügt ist. Wenn ich ähnliche Programme unter FreeBSD ausführe, wird jede Zeile an nohup.out gesendet. Gibt es eine Ubuntu-Einstellung, die ich einstellen kann, um die Ausgabe schneller zu erhalten?

Paul Hoffman
quelle

Antworten:

9

Ja, das hat damit zu tun, wie stdout unter Linux standardmäßig gepuffert wird. Sie müssen setbuf () explizit im Code ausführen, um dieses Verhalten zu überschreiben.

Mein Vorschlag ist, nohup zu vermeiden. Wenn Sie die Bash-Shell verwenden, können Sie den Befehl von Ihrer Shell trennen

$ ( my_cmd > ~/output.log 2>&1 & ) 

Sie können disowneinen ähnlichen Effekt auch für einen aktuell ausgeführten Job verwenden.

Philip Reynolds
quelle
Warum würden Sie empfehlen, nohup zu vermeiden?
Warner
Ich denke, weil es dumm ist, setbuf () in jedes Python-Skript zu setzen, das möglicherweise nicht aktualisiert wird.
Paul Hoffman
Dies funktioniert, obwohl ich immer noch Pufferung bekomme. Das könnte an dem Programm (Server) liegen, das ich gerade ausführe - ich muss mich mit der Pufferung befassen, die es möglicherweise ausführt.
Chris Prince
3

Da Ihr Programm Python ist, können Sie es mit Python -u ausführen . Alternativ kann das Entpufferungsprogramm hilfreich sein.

Zac Thompson
quelle