Mam skrypt, który wywołuje wiele innych skryptów instalacyjnych
./script1.sh 2>&1 | tee script1.log<br>
./script2.sh 2>&1 | tee script2.log<br>
./script3.sh 2>&1 | tee script3.log<br>
Wszystkie wyglądają ok do ostatniego, który wywołuje niestandardowy skrypt inicjujący. Ten skrypt startowy uruchamia się daemon
jako /usr/local/daemon
&. tj. umieszcza to w tle.
Połącz to z używaniem, tee
a główny skrypt zawiesza się, ponieważ finał tee
nigdy się nie kończy.
Skrypt inicjujący to aplikacja .NET działająca w trybie mono, więc mam bardzo niewielką kontrolę nad nim. Jeśli nie używam tee
, wszystko wygląda dobrze. Uruchomienie ostatniego polecenia z wiersza poleceń ma taki sam efekt.
Jeśli ktoś mógłby zasugerować sposób czystego wyjścia ze skryptu, byłbym wdzięczny. Na razie przeniosłem wywołanie do skryptu inicjującego ze skryptu3 do skryptu nadrzędnego i działa dobrze, ale oczywiście nie jest zalogowany.
Odpowiedzi:
To może nie być najlepsza odpowiedź, ale możesz to zrobić
tee script3.log &
(ze znakiem handlowego na końcu), aby skrypt mógł zakończyć się bez zawieszenia. Ma efekt uboczny zakończenia skryptu przed zakończeniemscript3.sh
.źródło
Tee nie wyjdzie z wdziękiem, dopóki stdout zarówno procesu nadrzędnego, jak i podrzędnego nie zostanie zamknięty. Spróbuj przekierować standardowe wyjście demona
źródło