blog/_posts/Linux/systemd.md

88 lines
3.4 KiB
Markdown
Raw Normal View History

2024-03-19 02:30:55 +00:00
---
title: 🔰systemd服务单元文件讲解
date: 2024-03-16
tags: Linux
---
systemd服务单元文件主要放在`/usr/lib/systemd/system`或`/etc/systemd/system`目录下,文件一般以 `.service` 为后缀。找到配置文件以后,使用文本编辑器打开即可。
也可以`systemctl cat`命令可以用来查看配置文件。
## systemd服务单元文件
2024-03-19 05:15:18 +00:00
`systemd`服务单元文件是服务系统自启动的一种脚本。以下是一个示例:
2024-03-19 02:30:55 +00:00
```sh
[Unit]
Description=My Sample Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/php /path/to/your/script.php
Restart=always
[Install]
WantedBy=multi-user.target
```
2024-03-19 02:38:08 +00:00
<!--more-->
2024-03-19 02:30:55 +00:00
将这个服务单元文件保存在 /etc/systemd/system/ 目录下。使用以下命令启用这个服务并启动它:
2024-03-19 02:36:18 +00:00
```sh
sudo systemctl enable my-service.service # 启用,随机启动
sudo systemctl start my-service.service # 启动
```
2024-03-19 02:30:55 +00:00
## 常见配置讲解
### Unit 配置
1. Description描述服务的简要说明。
2. Documentation服务的文档URL。
3. Requires指定服务所依赖的其他服务。
4. After指定服务的启动顺序,表示在服务之后启动。
5. Before指定服务的启动顺序,表示在服务之前启动。
6. Condition指定服务的启动条件。
### Service 配置
1. ExecStart指定启动服务时执行的命令。
2. ExecStop指定停止服务时执行的命令。
3. Restart指定服务异常退出时的重启策略。
- always表示无论何时服务退出无论是正常退出还是异常退出Systemd都会自动尝试重新启动该服务。
- on-success仅在服务正常退出时重启。
- on-failure仅在服务异常退出时重启。
- on-abnormal在服务异常退出时重启。
- on-abort在服务收到中止信号时重启。
4. User指定服务的用户。
5. WorkingDirectory指定服务的工作目录注意需要使用绝对路径。
6. Environment指定服务的环境变量。
### Install 配置段
WantedBy用于指定哪些Systemd目标服务会依赖当前服务。Systemd目标服务是一种特殊的服务单元用于控制系统启动和关闭的过程。可选如下
1. multi-user.target多用户目标表示系统处于正常运行状态。
2. graphical.target图形界面目标表示系统启动到图形界面。
3. rescue.target紧急恢复目标用于系统无法启动时进入紧急模式。
4. halt.target关机目标表示关闭系统。
5. reboot.target重启目标表示重启系统。
## systemctl命令使用
systemctl是Systemd前端管理工具用于管理Systemd服务和系统状态。
1. systemctl list-dependencies 命令列出一个 Unit 的所有依赖。
2. sysystemctl status <service-name> 命令用于查看系统状态和单个 Unit 的状态。
3. systemctl list-units命令可以查看当前系统的所有 Unit。
4. systemctl list-unit-files命令可以查看当前系统的所有 Unit 文件。
5. systemctl restart <service-name> 命令用于重启单个 Unit。
6. systemctl start <service-name> 命令用于启动单个 Unit。
7. systemctl stop <service-name> 命令用于停止单个 Unit。
8. systemctl enable <service-name> 命令用于开启单个 Unit 的自动启动。
9. systemctl disable <service-name> 命令用于禁用单个 Unit 的自动启动。
2024-03-19 02:33:35 +00:00
## 参考
[阮一峰Systemd 入门教程](https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html)