在 Linux 系统中,systemd 服务文件是配置服务的核心,其格式为 INI 文件,由多个 [Section] 组成,每个部分包含不同的配置项。下面详细介绍服务文件的内容和配置方法。
服务文件的基本结构
一个完整的 systemd 服务文件通常包含三个核心部分:
[Unit]
Description=描述信息
After=依赖服务
[Service]
ExecStart=启动命令
WorkingDirectory=工作目录
User=运行用户
Type=服务类型
Restart=重启策略
[Install]
WantedBy=多用户目标
- [Unit] 部分
这部分主要用于设置服务的元数据和依赖关系。
[Unit]
Description=My Python Application # 服务的简短描述
Documentation=man:systemd.special # 可选的文档引用
After=network.target # 指定服务启动的顺序依赖
Before=other.service # 可选,指定在哪些服务之前启动
Wants=other.service # 可选,弱依赖关系
Requires=other.service # 可选,强依赖关系
关键配置项:
- After:表明此服务应在哪些服务启动之后再启动。
- Wants:意味着如果被依赖的服务启动失败,不会影响当前服务的启动。
- Requires:表示被依赖的服务必须成功启动,否则当前服务也无法启动。
- [Service] 部分
该部分用于定义服务的启动方式和运行行为。
[Service]
Type=simple # 服务类型,常见值有 simple、forking、oneshot 等
ExecStart=/usr/bin/python3 /path/to/script.py # 启动服务的命令
ExecStartPre=/path/to/pre-script # 可选,启动前执行的命令
ExecStartPost=/path/to/post-script # 可选,启动后执行的命令
ExecStop=/path/to/stop-command # 可选,停止服务的命令
ExecReload=/path/to/reload-command # 可选,重载配置的命令
Restart=always # 重启策略,可选值有 no、on-success、on-failure、always 等
RestartSec=5s # 重启前的等待时间
User=username # 运行服务的用户
Group=groupname # 运行服务的用户组
WorkingDirectory=/path/to/app # 工作目录
Environment=VAR1=value1 # 环境变量设置
EnvironmentFile=/path/to/envfile # 可选,环境变量文件路径
StandardOutput=syslog # 标准输出日志位置
StandardError=syslog # 标准错误日志位置
LimitNOFILE=65536 # 可选,文件描述符限制
TimeoutStartSec=30 # 可选,启动超时时间
关键配置项:
- Type:不同类型对应不同的启动方式,常用的有:
- simple:默认值,适用于直接启动且不会后台运行的程序。
- forking:适用于会通过 fork 方式后台运行的程序,如 Apache。
- oneshot:适用于一次性任务,如系统初始化脚本。
- ExecStart:启动服务的命令,必须使用绝对路径。
- Restart:控制服务在异常退出时是否自动重启。
- [Install] 部分
此部分用于配置服务的安装选项,主要是定义服务如何随系统启动。
[Install]
WantedBy=multi-user.target # 常用的目标是 multi-user.target
RequiredBy=other.service # 可选,被其他服务所依赖
Alias=custom-name.service # 可选,服务的别名
Also=other.service # 可选,安装此服务时同时安装的其他服务
关键配置项:
- WantedBy:指定服务所在的目标单元,multi-user.target 是大多数服务器环境的标准运行级别。