Как убедиться, что sshd является последней службой, которая будет остановлена ​​во время выключения?

Я заметил, что когда я выпускаю reboot Команда, мое SSH-соединение немедленно закрывается на CentOS 7. Это не означает, что сервер перезагрузился, так как я все еще могу пропинговать его.

Кажется, systemd убивает sshd слишком рано. Иногда служба застревает, закрывается или просто работает медленно, и я больше не могу войти, чтобы проверить, что не так, даже если сервер работает.

Есть ли способ сказать systemd убивать sshd только после того, как все другие службы не работают?

3 ответа

Даже если бы вы могли гарантировать, что SSH - последняя служба, которая будет закрыта, это будет бессмысленно, потому что вы потеряете соединение, как только сетевые службы будут остановлены.

Машина Linux, которая загружается, запускает все службы в заранее определенном порядке: сначала самые важные службы, системный журнал, брандмауэр, затем сеть и, в конечном итоге, приложения, требующие доступа к сети (веб-сервер, сервер SSH и т. Д.). При завершении работы эти службы останавливаются в обратном порядке. Таким образом, вы потеряете соединение SSH практически сразу.

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

Это немного хак, но как насчет добавления чего-то вроде:

ExecStopPre=sleep 60

в раздел "[Сервис]" /usr/lib/systemd/system/sshd.service? Это не гарантировало бы порядок выключений, но если вы могли бы допустить более длительное время выключения, это могло бы позволить вам поддерживать свою оболочку достаточно долго, чтобы убедиться, что все остальное завершено нормально, или сделать несколько быстрых осмотров. Не уверен, что это полезно в общем случае, так как, вероятно, уже слишком поздно прерывать проблемное завершение работы на этом этапе, но это может быть полезно в ситуации, когда у вас возникает повторяющаяся проблема во время завершения работы, которую вы пытаетесь отладить.

Я не уверен, что вы здесь, но первое, о чем нужно подумать, это начать процесс заново.

Так что в вашем случае вы можете перезапустить родительский процесс sshd:

       renice PRIO_MAX -p pid-of-sshd
Другие вопросы по тегам