У меня есть удаленная машина с зашифрованными дисками, поэтому каждая полная перезагрузка требует физического доступа к машине. На машине просто возникли проблемы с нехваткой дискового пространства, поэтому часть запущенных служб аварийно завершила работу или вошла в странные состояния неисправности. Я бы хотел «мягкую перезагрузку» машины без перезагрузки всего ядра, чтобы избежать перемонтирования дисков и необходимости вводить кодовую фразу.
ОС использует systemd
для управления службами и ядра 4.9.
Я использовал с переменным успехом (эти ярлыки "доступно только для совместимости")
init 1; init 3
Что в настоящее время обычно означает следующее:
systemctl isolate rescue; systemctl isolate default
Что убивает все, кроме сервисов, которые считаются необходимыми или являются частью указанных целей - systemd по-прежнему предоставляет цели, которые примерно имитируют часть того, к чему привыкли уровни запуска.
systemctl изолировать БЛОК
Запустите модуль, указанный в командной строке, и его зависимости и остановите все остальные, если они не имеют IgnoreOnIsolate = yes (см. Systemd.unit (5)). Если указано имя объекта без расширения, предполагается расширение «.target». - человек 1 systemctl
Причина, по которой я не очень люблю это рекомендовать, - это как раз убойная часть:
Это похоже на изменение уровня запуска в традиционной системе инициализации. Команда изолировать немедленно остановит процессы, которые не включены в новом модуле, возможно, включая графическую среду или терминал, который вы используете в настоящее время. - человек 1 systemctl
Я попробовал это на Ubuntu и решил, что предпочитаю, если ssh.service
и network.target
были частью моих rescue.target
. Потому что безопаснее, если только сервисы, кроме ssh и его сетевых зависимостей были перезапущены.
Потому что, если что-то пойдет не так при активации rescue.target, в противном случае приведенная выше команда может убить мой сеанс и не вернуть все обратно.