探讨学习 systemd 服务管理

核心就是三件事:

  1. 几个基础命令 - systemctljournalctl
  2. 服务生命周期管理 - 安装、启用、启动、停止、卸载
  3. 读懂和编写 .service 文件 - 这是真正的精髓
重要习惯:当你创建新的单元文件或修改了任何单元文件后,必须让 systemd 重新加载其配置。

执行命令:

1
sudo systemctl daemon-reload

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
# 重新加载所有单元文件,使更改生效(不会重启正在运行的服务)
sudo systemctl daemon-reload

# 启动一个服务
sudo systemctl start nginx

# 停止一个服务
sudo systemctl stop nginx

# 重启一个服务
sudo systemctl restart nginx

# “优雅地”重新加载服务的配置(如果支持)
sudo systemctl reload nginx

# 查看服务的状态(非常重要!)
systemctl status nginx

# 启用服务,使其在开机时自动启动
sudo systemctl enable nginx

# 禁用服务,取消开机自动启动
sudo systemctl disable nginx

# 检查服务是否被设置为开机启动
systemctl is-enabled nginx

用户级别

要使用用户级服务,需确保当前用户已启用linger模式。

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
# 在系统级别启用用户 linger
sudo loginctl enable-linger $USER

# 检查状态
loginctl show-user $USER | grep Linger

# 重新加载用户单元配置(修改 .service 文件后必须执行)
systemctl --user daemon-reload

# 启动一个用户级服务
systemctl --user start my-demo-service

# 停止服务
systemctl --user stop my-demo-service

# 查看服务状态
systemctl --user status my-demo-service

# 设置服务开机自启(需已启用 linger)
systemctl --user enable my-demo-service

# 禁用开机自启
systemctl --user disable my-demo-service

# 查看是否启用自启
systemctl --user is-enabled my-demo-service

# 查看所有活跃的用户级服务
systemctl --user list-units --type=service --state=active

journalctl

1
2
3
4
5
6
7
8
9
# 主要记录服务进程的启动、停止、重载等运行时状态变化,而不记录系统级的启用/禁用配置变更。
# 查看指定服务的所有日志
sudo journalctl -u nginx

# 实时跟踪(尾随)指定服务的最新日志(类似 tail -f)
sudo journalctl -u nginx -f

# 查看从今天起的日志
sudo journalctl -u nginx --since today

服务生命周期

  • “安装服务” = 创建 .service 文件 + systemctl enable + start

  • “卸载服务” = stop + systemctl disable + 删除文件

.service单元文件

单元文件的位置

  • /usr/lib/systemd/system/发行版预设的单元文件
  • /etc/systemd/system/系统管理员自定义的单元文件。当需要自定义时,应该将文件放在这里。
  • ~/.config/systemd/user/用户级自定义的单元文件

优先级/etc/systemd/system/ 中的文件优先级高于 /usr/lib/systemd/system/

单元文件的内容

1
2
3
4
5
6
7
8
[Unit]
# 这里描述单元的基本信息和依赖关系

[Service]
# 这里是服务本身的定义和配置,是最核心的部分

[Install]
# 这里定义如何"安装"这个服务(比如如何启用开机自启)