重新启动 Linux 中的所有服务而不重新启动内核?

重新启动 Linux 中的所有服务而不重新启动内核?

我有一台远程机器,该机器的驱动器已加密,因此每次完全重启都需要物理访问机器。机器刚刚遇到磁盘空间不足的问题,因此部分正在运行的服务崩溃/进入奇怪的故障状态。我想“软重启”机器,而不实际重启整个内核,以避免重新安装驱动器和输入密码的必要性。

操作系统用于systemd服务管理和内核 4.9。

答案1

我使用过,效果参差不齐(这些快捷方式是“仅用于兼容性“)

init 1; init 3

如今,这句话通常翻译为:

systemctl isolate rescue; systemctl isolate default

这会杀死除了被视为必需的服务或指定目标的一部分之外的所有服务 - systemd 仍然提供大致模仿以前运行级别部分的目标。

systemctl 隔离单元

启动命令行上指定的单元及其依赖项并停止所有其他单元,除非它们具有 IgnoreOnIsolate=yes(参见 systemd.unit(5))。如果给出的单元名称没有扩展名,则将假定扩展名为“.target”。-人 1 系统控制

我不太喜欢推荐这个的原因,正是致命的部分:

这类似于在传统 init 系统中更改运行级别。isolate 命令将立即停止新单元中未启用的进程,可能包括您当前正在使用的图形环境或终端。-人 1 系统控制

我在 Ubuntu 上尝试过,发现我更喜欢 ifssh.servicenetwork.target是我的一部分rescue.target。因为 if 肯定更安全仅限除 ssh 及其网络依赖项之外的服务已重新启动。

因为如果在激活 rescue.target 时出现问题,上述命令可能会终止我的会话并且无法恢复一切。

答案2

systemdv254 开始,有一个soft-reboot.target执行用户空间“重启”的功能:

systemctl soft-reboot

它似乎非常适合这类任务。它避免了常规关机程序的全面杀戮,并允许保留一些资源。

相关内容