systemd这个启动服务的机制,是通过一支名为systemctl的指令来处理的。跟以前 systemV 需要 service / chkconfig / setup / init 等指令来协助不同, systemd 就是仅有systemctl 这个指令来处理而已。
17.2.1 通过 systemctl 管理单一服务 (service unit) 的启动/开机启动与观察状态
关掉atd不应该使用kill的方式来关掉一个正常的服务,否则systemctl会无法继续监控该服务。使用 systemtctlstatus atd 的输出结果中,第 2, 3 两行很重要~因为那个是告知我们该 unit 下次开机会不会默认启动,以及目前启动的状态。
基本上有几个常见的状态:
active (running):正有一只或多只程序正在系统中执行的意思,举例来说,正在执行中的 vsftpd 就是这种模式。
active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。举例来说,开机或者是挂载时才会进行一次的 quotaon 功能,就是这种模式! quotaon不须一直执行,只须执行一次之后,就交给文件系统去自行处理。通常用 bash shell写的小型服务,大多是属于这种类型 (无须常驻内存)。
active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。举例来说,打印的伫列相关服务就是这种状态! 虽然正在启动中,不过,也需要真的有伫列进来 (打印工作) 这样他才会继续唤醒打印机服务来进行下一步打印的功能。
inactive:这个服务目前没有运行的意思。
enabled:这个 daemon 将在开机时被执行
disabled:这个 daemon 在开机时不会被执行
static:这个 daemon 不可以自己启动 (enable 不可),不过可能会被其他的 enabled的服务来唤醒 (相依属性的服务)
mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。可通过systemctl unmask 方式改回原本状态服务启动/关闭与观察的练习
服务启动/关闭与观察的练习
问题:找到系统中名为 chronyd 的服务,观察此服务的状态,观察完毕后,将此服务设置为: 1)开机不会启动 2)现在状况是关闭的情况!回答:我们直接使用指令的方式来查询与设置看看:
强迫服务注销 (mask) 的练习
比较正规的作法是,要关闭 cups.service 时,连同其他两个会唤醒 service 的 cups.socket 与cups.path 通通关闭,比较不正规的作法是,那就强迫 cups.service 注销,通过 mask 的方式来将这个服务注销看看!
那如何取消注销呢?当然就是 unmask。