Unit.server 配置
最后更新于:2022-04-02 03:48:50
[TOC]
> [官方汉化手册](http://www.jinbuguo.com/systemd/systemd.directives.html)
## Unit 配置
- `/usr/lib/systemd/system/` 真正的配置文件存放在那个目录
- `/etc/systemd/system/` 为映射到 `/usr/lib/systemd/system/` 的目录
- 配置文件的后缀名,就是该 Unit 的种类,比如`sshd.socket`。如果省略,Systemd 默认后缀名为`.service`
### 配置文件的格式
```
[Unit]
Description: 简短描述
Documentation: 文档地址
Requires: 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
Wants: 与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
BindsTo: 与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
Before: 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
After: 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
Conflicts: 这里指定的 Unit 不能与当前 Unit 同时运行
Condition...: 当前 Unit 运行必须满足的条件,否则不会运行
Assert...: 当前 Unit 运行必须满足的条件,否则会报启动失败
[Service]
Type: 定义启动时的进程行为。它有以下几种值。
Type=simple:(默认值),执行ExecStart指定的命令,启动主进程
Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
Type=oneshot: 用于那些只需要执行一次性动作而不需要持久运行的单元
Type=dbus:当前服务通过D-Bus启动
Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行
Type=idle:若有其他任务执行完毕,当前服务才会运行
ExecStart: 启动当前服务的命令
ExecStartPre: 启动当前服务之前执行的命令
ExecStartPost: 启动当前服务之后执行的命令
ExecReload: 重启当前服务时执行的命令
ExecStop: 停止当前服务时执行的命令
ExecStopPost: 停止当其服务之后执行的命令
RestartSec: 自动重启当前服务间隔的秒数
Restart: 定义何种情况 Systemd 会自动重启当前服务
always(总是重启)
on-success
on-failure
on-abnormal (异常时启动)
on-abort
on-watchdog
TimeoutSec: 定义 Systemd 停止当前服务之前等待的秒数
WorkingDirectory: 工作目录
Environment: 指定环境变量
EnvironmentFile: 指定当前服务的环境参数文件。该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取
[Install]
WantedBy: 它的值是一个或多个 Target,
当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中
RequiredBy: 它的值是一个或多个 Target,当
前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
Alias: 当前 Unit 可用于启动的别名
Also: 会被同时激活的其他 Unit ,多个由空格隔开
```
### 抑制错误
所有的启动前都可以加上`-`
如
```
EnvironmentFile=-/etc/sysconfig/sshd
```
### 多个环境变量
```
Environment=FLUENT_CONF=/etc/td-agent/td-agent.conf
Environment=FLUENT_PLUGIN=/etc/td-agent/plugin
```
### 修改配置文件后重启
```
systemctl daemon-reload 重新加载配置文件
systemctl restart foobar 重启相关服务
```
';