Тройник вызывает зависание скриптов bash
У меня есть скрипт, который вызывает ряд других скриптов установки
./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 ответа
Это может быть не лучшим ответом, но вы можете сделать tee script3.log &
(с амперсандом в конце), чтобы скрипт мог завершиться без зависания. У него есть побочный эффект завершения сценария перед завершением script3.sh
,
Tee не выйдет изящно, пока не закроется stdout родительского и дочернего процессов. Попробуйте перенаправить стандартный вывод демона
/usr/local/daemon > /dev/null 2>&1 &