Перезапустить все службы в 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, вышеприведенная команда в противном случае может как убить мой сеанс, так и не вернуть все обратно.

Сsystemdv254 естьsoft-reboot.targetкоторый выполняет «перезагрузку» пользовательского пространства:

      systemctl soft-reboot

который, кажется, хорошо подходит для такого рода задач. Это позволяет избежать полномасштабных убийств, связанных с обычной процедурой отключения, и позволяет сохранить некоторые ресурсы.

Другие вопросы по тегам