Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

отключение ssh клиента без задержки

На предыдущем vds putty и winscp после команды reboot моментально выдавали окошко потерянного подключения, на новом сервере все просто подвисает до конца таймаута. Хостинг один, ОС одна (Debian 8). Переподключаться стало менее удобно, подскажите как настроить "по старому".


Ответ

вольный перевод ответа к аналогичному вопросу (английский текст присутствует как html-комментарии):

когда вы выключаете или перезагружаете систему, systemd пытается остановить все сервисы так быстро, как сможет. это приводит к тому, что отключается сеть и завершаются все выполняющиеся процессы — обычно в таком порядке. и когда systemd «убивает» «дочерние» ssh-процессы, которые обслуживают вашу ssh-сессию, сеть уже отключена и эти процессы не могут корректно завершить клиентское соединение.

первой мыслью может быть просто «убийство» ssh-процессов в качестве первого шага при выключении, и есть несколько «сервисных» файлов в конфигурации systemd, которые идут именно этим путём.

но есть, конечно, и более «тонкое» решение (как это и «предполагалось» делать): systemd-logind

systemd-logind отслеживает активные сессии (локальные и через ssh) и назначает всем процессам, порождённым этими сессиями, так называемые «срезы» ("slices"). потому, когда система завершает работу, systemd может послать сигнал SIGTERM всем процессам внутри пользовательских «срезов» (которые включают и «дочерние» ssh-процессы, обслуживающие данную сессию), а затем продолжить отключение сервисов и сети.

systemd-logind требуется pam-модуль для того, чтобы получать уведомления о новых пользовательских сессиях, и ещё нужен dbus для того, чтобы loginctl мог проверить их статус, поэтому установите их оба:
$ sudo apt-get install libpam-systemd dbus

комментарий от меня лично: ещё раз убеждаюсь в том, что systemd — это явно не та сторона в «борьбе добра со злом», которую я согласен выбрать и поддерживать.

Комментариев нет:

Отправить комментарий