Почему этот bash-файл останавливает мой tomcat, если сеанс закрывается?

Почему этот bash-файл останавливает мой tomcat, если сеанс закрывается?

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

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

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

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

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

решение1

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

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

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

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

Связанный контент