linux systemctl命令详解

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

笔者在前文中概要的介绍了 systemd 的基本概念和主要特点。由于 systemd 相关的绝大多数任务都是通过 systemctl 命令管理的,所以本文将集中的介绍 systemctl 命令的用法。注意,本文以 ubuntu 16.04 进行介绍,文中所有的 demo 都在 ubuntu 16.04 中完成。

systemctl 命令有两大类功能:

    控制 systemd 系统 管理系统上运行的服务

    在介绍这些功能前让我们先来热个身,了解些 systemctl 命令自身相关的信息。

    预热

    检查 systemd 的版本

    $ systemctl --version

    查看 systemd 和 systemctl 程序相关的目录

    $ whereis systemd $ whereis systemctl

    确认 1 号进程

    作为 init 系统,systemd 进程作为系统中的 1 号进程应该是毋庸置疑的,让我们搜索与 systemd 相关的进程:

    结果让人有点不敢相信自己的眼睛,我们搜到了好几个与 systemd 相关的进程,但是却没有 1 号进程。让我们看看 1 号进程是谁:

    /sbin/init 是什么?

    好吧,/sbin/init 只是到 /lib/systemd/systemd 的链接文件,系统的 1 号进程的确是 systemd,只不过在 ubuntu 系统中被起了个别名叫 /sbin/init。

    管理单个 unit

    systemctl 提供了一组子命令来管理单个的 unit,其命令格式为:
    systemctl [command] [unit]
    command 主要有:
    start:立刻启动后面接的 unit。
    stop:立刻关闭后面接的 unit。
    restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。
    reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。
    enable:设置下次开机时,后面接的 unit 会被启动。
    disable:设置下次开机时,后面接的 unit 不会被启动。
    status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。
    is-active:目前有没有正在运行中。
    is-enable:开机时有没有默认要启用这个 unit。
    kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。
    show:列出 unit 的配置。
    mask:注销 unit,注销后你就无法启动这个 unit 了。
    unmask:取消对 unit 的注销。

    我们先通过 prometheus.service 来观察服务类型 unit 的基本信息: