У нас есть файл сборки, который выполняет git checkout, компилирует войну, развертывает в tomcat и затем выдает -f - catalina.log. Если сеанс ssh, во время которого это делается, каким-то образом умирает, даже если мы только храним файл журнала, весь экземпляр tomcat умрет. Очевидно, что это не идеально, но я хотел бы знать, почему это происходит и как это исправить.

Происходит на Gentoo и Ubuntu (то есть на двух, на которых я тестировал)

1 ответ1

1

Не запускайте демоны из интерактивной оболочки, подключенной к терминалу.

Сконфигурируйте демоны так, чтобы они работали должным образом, управляемыми любыми супервизорами, с которыми поставляется ваша система, будь то что угодно от s6-supervise до launchd . Используйте интерфейс управления, чтобы поднимать и опускать демонов.

Когда ваше SSH-соединение потеряно, процесс SSH-сервера закрывает основную сторону псевдотерминала, которую он открывает. Это вызывает отправку SIGHUP процессу лидера сеанса, оболочке верхнего уровня и всем процессам в группе процессов переднего плана. Когда bash получает SIGHUP , он отправляет SIGHUP всем дочерним процессам, от которых ему не велено disown . Это, конечно, включает в себя процесс tomcat который вы запустили из этой интерактивной оболочки.

У демонов не должно быть никакого управляющего TTY, и он не должен принадлежать к какой-либо группе процессов или сеансу, известным любому TTY, чтобы непривилегированные пользователи не могли отправлять им случайные и, возможно, неожиданные сигналы. Запуск их из системного супервизора (ов) демона гарантирует, что этот и все остальные аспекты состояния процесса демона настроены соответствующим образом для процесса демона. Многие супервайзеры демонов также будут автоматически регистрировать логи для демона.

Запускай своего tomcat демона правильно.

дальнейшее чтение

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