Home systemd 服务的自启动和屏蔽
Post
Cancel

systemd 服务的自启动和屏蔽

服务的进一步管理,以ntpd daemon为例。

ntpd进程:(Network Time Protocol daemon),ntpd 是一个操作系统Daemon进程,用于校正本地系统与Internet标准时钟源之间的时间。

stop service

使用systemctl stop可以简单的停止服务,即关闭运行中的守护进程。它不会做其他事情,服务仍可以被其他方式激活。如手动激活、 套接字激活、总线激活、通过系统引导激活等等。

1
2
3
systemctl stop ntpd.service
# 约等效于
# service ntpd stop

开启:使用对称的 start 即可。

disable service

使用systemctl disable可以禁用服务,即解除服务与其激活触发器的关联,这会导致服务不会在系统引导时被激活以及socket,bus激活,硬件连接激活等。 不过,仍可以手动激活服务。因为disable是解除服务和触发器的关联,并不会直接关闭服务。即是从下次开始生效,通常是机器重启后。要停止服务, 需要手动关闭,使用 systemctl stop。这两个命令可以一起使用。

1
2
3
4
5
6
systemctl disable ntpd.service
# #约等效于
# chkconfig ntpd off

# 可选,一般会一起用
systemctl stop ntpd.service

开启:disable是永久的,要再次开启,使用对称的 enable 即可。

mask service

屏蔽服务,和disable服务比较相似,不过更激进。它不仅确保服务不再自动启动,而且甚至确保服务不能再被手动启动。 这是systemd中的一个隐藏特性,因为它通常不太有用,大概这样操作:

1
2
ln -s /dev/null /etc/systemd/system/ntpd.service
systemctl daemon-reload

通过将service文件符号链接到/dev/null,可以告诉systemd永远不要启动对应服务,并完全阻止它的执行。 保存在/etc/systemd/system中的单元文件会覆盖(override)保存在/lib/systemd/system中的同名service文件。 前一个目录是一般是管理员使用,后一个目录一般是包管理器使用。在/etc/systemd/system/路径下创建软链接ntpd.service, 确保systemd永远不会读取上游提供的服务文件/lib/systemd/system/ntpd.service。可以实现屏蔽服务的效果。

Systemd将识别与/dev/null符号链接的单元,并将它们显示为masked。如果试图手动启动这样的服务(例如通过systemctl start),将会失败并报错。

开启:屏蔽服务有些类似disable,也是永久生效的,除非手动删除掉那个链接到/dev/null 的软链接服务文件。

在SysV系统上,类似的方式并不存在。然而,有一些非官方的破解方法,比如编辑init脚本并在顶部放置退出0,或者删除它的执行位。 不过,这些解决方案有各种缺点,例如它们会干扰包管理器。

This post is licensed under CC BY 4.0 by the author.