2016-10-27 3 views
0

Ich versuche STDOUT und STDERR zu einer Protokolldatei auf Raspberry Pi umleiten. Mein .sh Skript enthält diese ZeileUmleitung von stdout und stderr zu Datei funktioniert nicht auf raspbian

sudo ./main.py &> client.log & 

Das Skript korrekt ausgeführt wird, wie es Daten zu und von meinem Server überträgt, aber client.log Datei bleibt leer. Ich habe versucht &>; &>>; >> mit 2>&1; und |&. Keiner von ihnen schreibt irgendwelche Daten zu client.log.

sudo ./main.py 

produziert sowohl stdout und stderr ausgegeben. Was mache ich falsch?

Antwort

2

Die Syntax Sie suchen, ist:

sudo ./main.py > client.log 2>&1 & 
  • > client.log Standardausgabe in die Datei client.log
  • 2>&1 Stderr
  • & am Ende der Leitung an stdout Umleitungen Umleitungen läuft dies im Hintergrund, damit Sie weiter an der Eingabeaufforderung arbeiten können.

Hinweis: Wenn Sie sich abmelden, während der Hintergrundbefehl ausgeführt wird, wird er beendet. Sie können dieses Verhalten überschreiben, indem Sie am Anfang der Zeile nohup hinzufügen. Weitere Informationen google bash jobs


Edited zusätzliche Informationen nach Kommentar unten

überarbeitet Syntax hinzufügen:

sudo stdbuf -o L -e L ./main.py > client.log 2>&1 & 
  • stdbuf ändert die Standard-Linux-Ausgabepufferung
  • -o L Flushes stdout an das Ende jeder Zeile
  • -e L Flushes stderr am Ende jeder Zeile
+0

Es scheint, ich lag falsch ... Diese Lösung sowie einige andere in meinem ursprünglichen Beitrag schreiben Daten in client.log, aber sie tun es 15 Minuten bis mehrere Stunden, nachdem es in stdout/stderr geschrieben wurde Mit main.py, und die Ausgabe neigt dazu, an beliebigen Stellen abgeschnitten zu werden, dh in der Mitte der Zeile ... – Mirac7

+0

Aha- das ist auch lösbar. Siehe die obige Bearbeitung. –

0

Python -u test.py> output.txt & Python wird die Ausgabe von Standard-Puffer und einfach das Skript zu töten nicht sofort bündig, dass die Standardausgabe auf Platte

Verwandte Themen