Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。

Systemd 包含众多指令,本文重点介绍常用的 systemctl 指令。

一、守护进程

曾经 Linux 的启动一直是采用的 init 进程,使用如下指令来启动服务:

1
2
3
$ sudo /etc/init.d/apache2 start
# 或者
$ service apache2 start

这种方法有两个缺点:

  1. 启动时间长

    init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。

  2. 启动脚本复杂

    init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

二、Systemd

为了解决上述两个问题,诞生了 Systemd。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。

根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要 守护整个系统

使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。

Systemd 并不是一个指令,而是一组指令,涉及到系统管理的各个方面。

接下来就是本文主要介绍的 systemctl 指令。

三、systemctl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 查看服务列表
systemctl list-units --type=service

# 列出所有已经安装的 服务及状态(可为人所读, 内容简略、清晰)
systemctl list-unit-files

# 列出正在运行的服务状态(基本不为人所读,内容复杂、全面)
systemctl

# 以树形列出正在运行的进程,它可以递归显示控制组内容
systemd-cgls

# 启动服务
systemctl start name.service

# 停止服务
systemctl stop name.service

# 重启服务
systemctl restart name.service

# 查看服务状态
systemctl status name.service

# 开机自启
systemctl enable name.service

# 取消开机自启
systemctl disable name.service

# 查看是否开机自启
systemctl is-enabled postfix.service

# 查看已启动的服务列表
systemctl list-unit-files | grep enabled

# 查看启动失败的服务列表
systemctl --failed

使用指令 systemctl is-enabled postfix.service 得到的值可以是enable、disable或static,这里的 static 它是指对应的 Unit 文件中没有定义[Install]区域,因此无法配置为开机启动服务。

启用服务就是在当前“runlevel”的配置文件目录 /etc/systemd/system/multi-user.target.wants 里建立 /usr/lib/systemd/system 里面对应服务配置文件的软链接,禁用服务就是删除此软链接,添加服务就是添加软连接。

评论

富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善