2

У меня есть скрипт, который вызывает ряд других скриптов установки

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

Все они выглядят нормально до последнего, который вызывает пользовательский скрипт инициализации. Этот скрипт инициализации запускает daemon как /usr/local/daemon &. т.е. ставит это на задний план.

Объедините это с использованием tee и основной сценарий зависнет, так как окончательный tee никогда не завершится.

Скрипт инициализации - это приложение .NET, работающее в режиме моно, поэтому я очень мало контролирую его. Если я не использую tee то все выглядит хорошо. Запуск последней команды из командной строки имеет тот же эффект.

Если бы кто-нибудь мог предложить способ сделать скрипт чистым, я был бы благодарен. На данный момент я переместил вызов сценария инициализации из script3 в родительский сценарий, и он работает нормально, но, конечно, он не зарегистрирован.

2 ответа2

1

Это может быть не лучшим ответом, но вы можете сделать это так: tee script3.log & (с амперсандом в конце), чтобы скрипт мог завершиться без зависания. У него есть побочный эффект завершения сценария перед завершением script3.sh .

0

Tee не выйдет изящно, пока не закроется stdout как родительского, так и дочернего процесса. Попробуйте перенаправить стандартный вывод демона

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .