linux systemctl命令详解

2019-01-16 22:19:30刘景俊

输出内容的第一行是对 unit 的基本描述。
第二行中的 Loaded 描述操作系统启动时会不会启动这个服务,enabled 表示开机时启动,disabled 表示开机时不启动。而启动该服务的配置文件路径为:/lib/systemd/system/prometheus.service。
第三行 中的 Active 描述服务当前的状态,active (running) 表示服务正在运行中。如果是 inactive (dead) 则表示服务当前没有运行。后面则是服务的启动时间。
第四行的 Docs 提供了在线文档的地址。
下面的 Main PID 表示进程的 ID,接下来是任务的数量,占用的内存和 CPU 资源。
再下面的 Cgroup 描述的是 cgrpup 相关的信息,笔者会在后续的文章中详细的介绍。
最后是输出的日志信息。

关于 unit 的启动状态,除了 enable 和 disable 之外还有:
static:这个 unit 不可以自己启动,不过可能会被其它的 enabled 的服务来唤醒。
mask:这个 unit 无论如何都无法被启动!因为已经被强制注销。可通过 systemctl unmask 改回原来的状态。

关于 unit 的运行状态 Active,除了 active 和 inactive 之外还有:
active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。举例来说,开机或者是挂载时才会进行一次的 quotaon 功能,就是这种模式! Quotaon 不需要一直执行,只在执行一次之后,就交给文件系统去自行处理。通常用 bash shell 写的小型服务,大多是属于这种类型。
active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。举例来说,打印的相关服务就是这种状态。

enable 和 disable 操作

比如我们为 prometheus 服务创建了配置文件 /lib/systemd/system/prometheus.service,然后执行 enable 命令:

$ sudo systemctl enable prometheus.service

所谓的 enable 就是在 multi-user.target.wants 下面创建了一个链接文件:

至于为什么会链接到 multi-user.target.wants 目录下,则是由 prometheus.server 文件中的配置信息决定的。

查看 unit 的配置

使用 show 子命令可以查看 unit 的详细配置情况:

$ sudo systemctl show prometheus.service

这里的输出非常多,主要是很多的默认设置也都显示出来了。

注销与反注销 unit

如果我们想暂时的禁用某个 unit,比如 prometheus.service,可以注销这个 unit,注销之后就无法再启动这个服务了: