Я заметил, что когда я выдаю reboot
, мое SSH-соединение немедленно закрывается в CentOS 7. Это не означает, что сервер перезагрузился, так как я все еще могу пинговать его.
Похоже, что systemd убивает sshd слишком рано. Иногда служба зависает при завершении работы или просто работает медленно, и я больше не могу войти в систему, чтобы проверить, что не так, даже если сервер работает.
Есть ли способ сказать systemd убивать sshd только после того, как все остальные службы не работают?
Даже если бы вы могли гарантировать, что SSH будет последней службой, которая будет отключена, это было бы бессмысленно, потому что вы потеряете соединение, как только сетевые службы будут остановлены.
Машина Linux, которая загружает, запускает все службы в заранее определенном порядке: сначала наиболее важные службы, системный журнал, брандмауэр, затем сеть и, наконец, приложения, требующие доступа к сети (веб-сервер, SSH-сервер и т. Д.). При выключении эти службы останавливаются в обратном порядке. Таким образом, вы потеряете соединение SSH практически сразу.
Тот факт, что SSH уже отключен, а вы все еще можете пинговать удаленную машину, является нормальным.
Это немного похоже на взлом, но как насчет добавления чего-то вроде:
ExecStopPre=sleep 60
в раздел "[Сервис]" /usr/lib/systemd/system/sshd.service
? Это не гарантирует порядок выключений, но если вы можете выдержать более длительное время выключения, это может позволить вам поддерживать свою оболочку в активном состоянии достаточно долго, чтобы убедиться, что все остальное завершено нормально, или сделать несколько быстрых поисков. Не уверен, что это полезно в общем случае, поскольку, вероятно, слишком поздно прерывать проблемное завершение работы на этом этапе в любом случае, но это может быть полезно в ситуации, когда у вас есть повторяющаяся проблема во время завершения работы, которую вы пытаетесь отладить.
Я не уверен, что вам здесь нужно, но первое, о чем можно подумать, - это изменить процесс.
Итак, в вашем случае вы можете переименовать родительский процесс sshd:
renice PRIO_MAX -p pid-of-sshd