Systemd 的基本配置

896 词

配置文件的构成

systemd 配置文件由三个部分组成:[Unit][Service][Install]

[Unit]
1
2
3
4
[Unit]
Description=nginx - high performance web server # 服务描述。
Documentation=http://nginx.org/en/docs/ # 该服务的文档地址。
After=network.target # 在network.target服务启动后,启动。
  • Description:服务的简短描述。
  • Documentation:服务文档的说明。
  • After:指定在那个服务之后启动。
[Service]
1
2
3
4
5
6
7
8
9
10
11
[Service]
Type=forking # 以子进程方式启动。
PIDFile=/usr/local/nginx/logs/nginx.pid # 进程的 id。
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 启动 nginx 并指定配置文件。
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf # 检测配置文件语法是否错误,并指定配置文件。
ExecStartPost=/bin/sleep 0.1 # Nginx服务启动完成后,系统会等待0.1秒。
ExecReload=/bin/kill -s HUP $MAINPID # 通过kill 发送 HUP 信号后会重新读取配置文件。
# 其实上面可以怎么写 /usr/local/nginx/sbin/nginx -s reload 来重载服务。
ExecStop=/bin/kill -s QUIT $MAINPID # 发送 SIGQUIT 信号给目标进程,请求其正常退出并生成core文件以便调试。
Restart=always
TimeoutStartSec=120
  • Type:服务的启动方式。
    • simple(默认);服务以一个主进程启动,systemd 会一直等待这个进程运行直到服务停止。
    • forking:该服务启动后会派生出一个子进程,systemd 会等待父级进程会退出,子进程将成为主进程。
    • oneshot:表示服务会在启动后完成一次性的任务,任务完成后就立即退出。
  • PIDFile:服务的 pid。
  • ExecStart:启动服务时要执行的命令或程序。这通常是启动服务的主要命令或程序。
  • ExecStartPre;服务启动之前需要执行的命令。
  • ExecStartPost:服务启动之后需要执行的命令。
  • ExecReload:重启服务时执行的命令。
  • ExecStop;停止服务时执行的命令。
  • Restart:服务在发生意外退出时的重启策略。
    • no(默认):服务不会自动重启。
    • always:除非通过systemctl stop命令停止服务,否则在任何情况下都会不断的重启服务。
    • on-success:仅在服务进程成功退出时重启。
    • on-failure:仅在服务进程异常退出时重启。
    • on-abnormal:仅在服务进程异常退出、超时、或者其它非正常情况下重启。
    • on-abort:仅在服务进程由于未捕获的信号而退出时重启。
    • on-watchdog:仅在服务进程未发送“看门狗”心跳时重启。
  • TimeoutStartSec:服务启动超时时间,如果服务在 设定的时间内没有完全启动成功,systemd 将会杀死服务。
[Install]
1
2
[Install]
WantedBy=multi-user.target
  • WantedBy:用于定义启动单元的目标的(开机自启的)。太抽象了(´・ω・`)?

如:我们有个 test.service 的服务。

test.service
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Test
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/Test

[Install]
WantedBy=multi-user.target

当运行 systemctl enable test (开机自启的时候)命令时,systemd 会在/etc/systemd/system/multi-user.target.wants/目录下创建一个到 test.service 的符号链接(软链)。这样,当系统下次启动并达到多用户目标状态时,就会(开机)启动 test 服务。

1
2
[root@localhost ~]# systemctl enable test.service
Created symlink /etc/systemd/system/multi-user.target.wants/test.service → /usr/lib/systemd/system/test.service.

如果没有写WantedBy的值,开机自启动或禁止开机自启动的操作将无任何效果。

重载配置文件

要重新加载配置文件和重启了该服务,才会生效。

1
2
3
4
5
# 重新加载配置文件
sudo systemctl daemon-reload

# 重启相关服务
sudo systemctl restart nginx

参考:
systemd 服务配置文件编写 by: 骏马金龙
systemd 入门教程:实战篇 by: 阮一峰

留言