tee powoduje zawieszanie się skryptów bash


2

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ę daemonjako /usr/local/daemon&. tj. umieszcza to w tle.

Połącz to z używaniem, teea główny skrypt zawiesza się, ponieważ finał teenigdy 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.


Natknąłem się na ten problem z przekierowaniem danych wyjściowych z narzędzia do budowania ładunku rdzy, znalazłem też ten wątek na ten temat: compgroups.net/comp.unix.aix/weird-tee-command-hang-korn-shell/... jak dotąd nie widziałem wszelkie dobre rozwiązania oprócz obejścia problemu.
ideasman42

Odpowiedzi:


1

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ńczeniem script3.sh.


0

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

/usr/local/daemon > /dev/null 2>&1 &
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.