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


8

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

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

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


8
Не ответ на ваш вопрос, но бесполезное напоминание: все производственные серверы должны иметь KVM, карту удаленного доступа или последовательный кабель. (хотя в зависимости от того, где остановка остановится, даже те могут быть бесполезны)
Эндрю Б

4
Это будет не просто; systemd активно работает параллельно с запуском и выключением. Мало того, что ssh будет немедленно убит, так же как и многие другие сервисы, возможно, включая сервис, который зависает. Получить на (удаленной) консоли и посмотреть, или проверить журналы при следующей загрузке.
Майкл Хэмптон

Может быть, у хороших людей на unix.stackexchange.com будет лучший совет по изменению процесса выключения systemd?
австралиец

Кажется, что systemd использует некоторый порядок, основанный на конфигурации запуска, для порядка завершения работы: serverfault.com/questions/618612/… но ссылка расплывчатая и длинная, я думаю, они указывают вам на DefaultDependencies - кажется, говорят, что если это необходимо что-то для запуска, при выключении служба не будет закрыта до того, от чего зависит.
Мэри

Ответы:


1

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

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

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


0

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

ExecStopPre=sleep 60

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


-5

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

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

       renice PRIO_MAX -p pid-of-sshd

Это изменит его приоритет в планировании ЦП почти в реальном времени, но не более того.
Сокол Момот
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.