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