目录
本教程将由浅入深的介绍 linux 中 Systemd 的知识和相关使用(同时也方便自己后续查阅)
【三】如何自定义 Systemd 服务
2.1 Systemd 是如何定义和管理服务的
Systemd 是通过配置文件来定义服务的,Systemd 会按照如下的目录顺序查找服务配置
/etc/systemd/system/:自定义或修改后的服务文件/run/systemd/system/:运行时服务文件/usr/lib/systemd/system/:软件包提供的服务文件
(这也意味着,假设系统中原先定义了一个服务,可以通过在 /etc/systemd/system/ 重写该服务的定义,覆盖原服务)
命令 systemctl daemon-reload
当修改了 Systemd 的配置文件后,需要执行 systemctl daemon-reload 来加载配置文件变更,配置文件的修改才能生效。
2.2 理解服务配置文件
下面将通过一个具体的配置文件的例子,让读者对 systemd 配置文件有一个直观地感受。
注意,这个例子并不是一个面面俱到的手册,只是方便理解的例子。
[Unit]
Description=My Awesome Service
Documentation=https://example.com/docs
After=network.target
Requires=postgresql.service
[Service]
Type=simple
User=appuser
Group=appgroup
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/myservice --config /etc/myapp/config.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s
TimeoutStartSec=30s
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
[Unit] 部分:元数据和依赖关系定义
- Description:人类可读的服务描述
- Documentation:包含服务文档的 URL 或手册页。
- After:定义执行顺序(但不创建依赖关系)
- Requires:硬依赖 - 如果此项失败,服务将无法启动。
- Wants:软依赖 - 即使此项失败,服务也将启动。
其中 After、Requires 和 Wants 都支持多个选项,使用空格分隔开。同时,他们后面的选项可以是任意的 Unit。
这里我觉得比较难以理解的是 After 和 Wants 的区别。After 指定启动顺序但不设定依赖,意思是如果只设定 After 某个服务,根本就不会触发这个服务的启动行为。这里可以举一个例子:假设你的服务依赖于 redis.service
- 单独使用 Wants=redis.service:Systemd

最低0.47元/天 解锁文章
1645

被折叠的 条评论
为什么被折叠?



