Следующий скрипт bash запускает Apache Tomcat и привязывает файл журнала к экрану:

#!/bin/bash
~/tomcats/TC1_8083/bin/startup.sh
tail -f ~/tomcats/TC1_8083/logs/catalina.out

Если я нажму CTRL-C за хвост, сценарий bash завершится, и Tomcat продолжит работать правильно, даже если я выйду из системы. Однако, если мой сеанс умирает (например, через отключение от сети), В то время как хвост все еще работает, Tomcat тоже останавливается. Если бы у меня был CTRL-C, то Tomcat не остановится, пока я не решу его убить.

Я не заинтересован в сохранении связи при отключении от сети, я просто хочу, чтобы Tomcat продолжал работать независимо.

Я не могу понять это поведение. Может кто-нибудь, пожалуйста, объясните это? Кроме того, как я могу изменить сценарий, чтобы Tomcat продолжал работать, даже если сеть отключилась?

1 ответ1

0

Когда вы вызываете скрипт из другого скрипта, он запускается в фоновом режиме (в противном случае у вас одновременно будут работать два скрипта на переднем плане, оба будут пытаться вывести их на экран)

Когда вы нажимаете Ctrl-C, вы посылаете сигнал прерывания в ваш скрипт (не только хвост), но скрипт tomcat продолжает работать в фоновом режиме, так как это отдельный скрипт.

Когда ваш сеанс умирает, все запущенные сценарии завершаются, в том числе те, которые выполняются в фоновом режиме.

Если вы хотите, чтобы сценарии продолжали выполняться при отключении от сети (преднамеренно или нет), я рекомендую tmux или screen.

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