如何在现代(基于systemd的)
Linux发行版上禁用除ssh之外的所有服务?
我需要实现一种维护模式.
所有这些服务都需要关闭:
> postgres
>后缀
>阿帕奇
>杯子
> cron
> dovecot
但是不能关闭ssh,因为这会习惯于在维护模式下执行任务.
当然,我可以编写一个shell脚本,它循环遍历我想要禁用的服务列表.但这感觉就像我重新发明已存在的东西,但我现在还不知道.
解决方法
这听起来很像跑步,取而代之的是Systemd中的
targets.因此,您可以创建一个仅包含必要服务(如SSH)的新maintenance.target,而不是编写启动和停止服务列表的脚本.当然,没有网络,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