禁用除ssh之外的所有服务


31

如何在现代(基于Systemd)Linux发行版上禁用除ssh之外的所有服务?

我需要实施维护模式

所有这些服务都需要关闭:

  • Postgres
  • 后缀
  • 阿帕奇
  • 杯子
  • 克朗
  • 鸽舍

但是一定不能关闭ssh,因为它在维护模式下习惯于执行任务。

当然,我可以编写一个shell脚本,该脚本循环遍历要禁用的服务列表。但这感觉就像是我在重新发明已经存在的东西,但是到目前为止我还不知道。


1
什么类型的任务?你为什么需要这个?
ewwhite

@ user430214我更新了问题。我补充说:当然,我可以编写一个Shell脚本,该脚本循环遍历要禁用的服务列表。但这感觉就像是我在重新发明已经存在的东西,但是到目前为止我还不知道。
guettli

Answers:


55

这听起来很像运行级别,在Systemd中已替换为目标。因此,您可以创建一个maintenance.target仅包含必需服务(例如SSH)的新脚本,而不必编写启动和停止服务列表的脚本。当然,如果没有网络连接,SSH并不是很有用,因此在此示例中,将简单emergency-net.target的修改为包括SSH。

[Unit]
Description=Maintenance Mode with Networking and SSH
Requires=maintenance.target systemd-networkd.service sshd.service
After=maintenance.target systemd-networkd.service sshd.service
AllowIsolate=yes

然后,您可以使用以下命令进入维护模式

# systemctl isolate maintenance.target

然后回来

# systemctl isolate multi-user.target

1
非常感谢您的回答。它向我表明,询问是有用的,即使您认为除了编写肮脏的shell脚本之外,没有很好的答案。Emergency-net.target是一个简单而优雅的解决方案-很棒:-)
guettli

的确如此,因为它还处理了所有依赖关系,并且您不需要在每次安装新服务时都更新脚本。
Esa Jokinen

3

首先列出您的服务并搜索其相应的systemd名称。

然后建立一个列表,并停止每个列表成员进入维护,然后在维护后启动每个成员。


5
为什么不只是使用systemctl isolate
克里斯·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.