Linux【Ubuntu】系统 .service文件内容详解
1、标签详解
[Unit] 部分标签:
- Description: 对服务的简短描述。
- Documentation: 指向相关文档的URL或路径。
- Requires: 服务依赖的其他单元。
- Wants: 服务希望启动的其他单元。
- BindsTo: 绑定到其他单元,如果其他单元停止,该单元也停止。
- After: 在指定的其他单元之后启动。
- Before: 在指定的其他单元之前启动。
- Conflicts: 与其他单元冲突。
- ConditionPathExists: 根据特定条件判断是否启动单元
- 其他: ………
**使用示例:**
[Unit]
Description=My custom script service
Documentation=https://example.com/my-service-docs
Requires=network.target
Wants=network-online.target
BindsTo=another-service.service
After=network.target
Before=shutdown.target
Conflicts=some-service.service
ConditionPathExists=/etc/my-service/config
[Service] 部分标签
- Type: 服务类型,如simple、forking、oneshot、dbus、notify、idle。
simple: 默认类型,ExecStart指定的命令为主进程。
forking: ExecStart指定的命令会通过forking产生新进程并作为主进程。
oneshot: 服务在启动后立即退出。
dbus: 服务通过D-Bus启动。
notify: 服务在启动时通过sd_notify发送通知。
idle: 服务在其他所有作业执行完成后启动。 - ExecStart: 启动服务时执行的命令。
- ExecStartPre: 启动前执行的命令。
- ExecStartPost: 启动后执行的命令。
- ExecReload: 重新加载服务时执行的命令。
- ExecStop: 停止服务时执行的命令。
- ExecStopPost: 停止后执行的命令。
- Restart: 服务重启策略,如always、on-failure等。
详细介绍: Restart标签是Linux systemd服务文件中的一个重要配置,它定义了服务在何种情况下应该自动重启。通过合理配置,可以增强服务的稳定性和容错能力。通常,Restart标签会与RestartSec标签一起使用,以控制重启的延迟时间。
语法:Restart=<restart-condition>
常见的Restart条件:
no: 默认值,不重启服务。
always: 无论服务如何退出,都重启服务。
on-success: 仅在服务正常退出时重启。
on-failure: 仅在服务非正常退出时重启(退出代码非零,信号导致的退出等)。
on-abnormal: 仅在服务由于信号(如SIGSEGV、SIGABRT等)导致的异常退出时重启。
on-abort: 仅在服务由于系统调用abort()导致的退出时重启。
on-watchdog: 仅在服务由于守护进程超时(watchdog timeout)导致的退出时重启。 - RestartSec: 服务重启前的等待时间。
- TimeoutStartSec: 启动超时时间。
- TimeoutStopSec: 停止超时时间。
- RuntimeMaxSec: 服务运行的最长时间。
- Environment: 环境变量设置。
- WorkingDirectory: 服务运行的工作目录。
- User: 以哪个用户身份运行服务。
- Group: 以哪个用户组身份运行服务。
- StandardOutput: 标准输出设置。
- StandardError: 标准错误设置。
- 其他: ………
**使用示例:**
[Service]
Type=simple
#路径必须使用绝对路径,也可以是带参数的程序【命令】
ExecStart=/usr/local/bin/my_script.sh
ExecStartPre=/usr/bin/pre-script.sh
ExecStartPost=/usr/bin/post-script.sh
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill $MAINPID
ExecStopPost=/usr/bin/stop-post-script.sh
Restart=on-failure
RestartSec=5s
TimeoutStartSec=30s
TimeoutStopSec=30s
RuntimeMaxSec=3600s
Environment="VAR1=value1" "VAR2=value2"
WorkingDirectory=/usr/local/my_service
User=myuser
Group=mygroup
StandardOutput=journal
StandardError=journal
[Install] 部分标签
- WantedBy: 指定该服务在哪些目标启动。
- RequiredBy: 指定该服务被哪些目标所需。
- Also: 该单元的其他相关单元。
- Alias: 单元的别名。
- 其他: ………
**使用示例:**
[Install]
WantedBy=multi-user.target
RequiredBy=another-service.target
Also=another-service.service
Alias=my-service-alias