tee verursacht, dass bash-Skripts hängen bleiben

2555
Terry

Ich habe ein Skript, das eine Reihe anderer Installationsskripts aufruft

./script1.sh 2>&1 | tee script1.log<br> ./script2.sh 2>&1 | tee script2.log<br> ./script3.sh 2>&1 | tee script3.log<br> 

Sie sehen bis zum letzten, der ein benutzerdefiniertes Init-Skript aufruft, in Ordnung aus. Dieses Init-Skript führt das daemonas /usr/local/daemon& aus. dh stellt es in den Hintergrund.

Kombinieren Sie dies mit using teeund das Hauptskript bleibt hängen, da das Finale teeniemals endet.

Das Init-Skript ist eine .NET-App, die unter Mono ausgeführt wird. Ich habe also kaum Kontrolle darüber. Wenn ich es nicht benutze tee, sieht alles in Ordnung aus. Das Ausführen des letzten Befehls von der Befehlszeile aus hat dieselbe Wirkung.

Wenn jemand eine Möglichkeit vorschlagen kann, das Skript sauber zu beenden, wäre ich dankbar. Im Moment habe ich den Aufruf des init-Skripts aus script3 in das übergeordnete Skript verschoben und es funktioniert gut, aber es wird natürlich nicht protokolliert.

2
In dieses Problem umgeleitete Ausgabe von Rusts Cargo Build-Tool, fand auch diesen Thread zum Thema: http://compgroups.net/comp.unix.aix/weird-tee-command-hang-korn-shell/1252821 so weit ich Ich habe keine guten Lösungen gesehen, außer das Problem zu umgehen. ideasman42 vor 7 Jahren 0

2 Antworten auf die Frage

1
Valmiky Arquissandas

Dies ist möglicherweise nicht die beste Antwort, aber Sie können dies tee script3.log &(mit einem kaufmännischen Und-Zeichen am Ende) tun, damit das Skript ohne hängen bleiben kann. Es hat den Nebeneffekt, das Skript vor dem Beenden zu beenden script3.sh.

0
Ashok Vairavan

Tee wird nicht ordnungsgemäß beendet, bis der Standardprozess des übergeordneten und des untergeordneten Prozesses geschlossen wird. Versuchen Sie, das stdout des Daemons umzuleiten

/usr/local/daemon > /dev/null 2>&1 &