Linux 系统资源管理 | 资源配置文件
新 Linux 系统中,使用 systemd 管理所有系统资源
所有资源成为 unit,每一个 unit 都有一个配置文件
有时候我们需要创建或修改 unit 的配置文件
配置文件可以用文本编辑器打开,比如 vim。
也可以用命令 systemctl cat nginx.service
# systemctl cat nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[Unit]
用来定义 Unit 的元数据,以及配置与其他 Unit 的关系
有以下参数:
-
Description:资源描述
-
Documentation:文档地址
-
Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
-
Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
-
BindsTo:它指定的 Unit 如果退出,会导致当前 Unit 停止运行
-
Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
-
After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
-
Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行
-
Condition...:当前 Unit 运行必须满足的条件,否则不会运行
-
Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败
[Service]
用来 service 的配置,只有服务资源有这个模块
-
Type:定义启动时的进程行为
-
Type=simple:默认值,启动主进程
-
Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
-
Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
-
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 停止当前服务之前等待的秒数
-
Environment:指定环境变量
[Install]
用来定义启动方式
-
WantedBy:一个或多个 Target,Unit 软链接会放入 /etc/systemd/system 目录下面以 Target 名 + .wants 后缀构成的子目录中
-
RequiredBy:一个或多个 Target,Unit 软链接会放入 /etc/systemd/system 目录下面以 Target 名 + .required 后缀构成的子目录中
-
Alias:Unit 可用于启动的别名
-
Also:Unit 激活(enable)时,会被同时激活的其他 Unit
配置文件中设置的 target,相当于一个 unit 组
启动某个 target,相当于启动了组内所有的 unit
target 也可以用 systemctl 查看
-
查看所有 target
systemctl list-unit-files --type=target
-
查看 target 包含的 unit
systemctl list-dependencies multi-user.target
-
查看系统启动时的默认 target
systemctl get-default
-
设置启动时的默认 target
systemctl set-default multi-user.target