相关网站
入门命令
命令 | 命令介绍 | 具体用法 |
---|---|---|
systemctl --version | 检查msystecrl是否安装并查看systemctl版本 | systemctl --version |
ps -ef | grep systemd | 查看msysted是否启动 | ps -ef | grep systemd |
whereis systemd | 查看systemd的二进制文件和库文件的安装位置 | whereis systemd |
whereis systemctl | 查看systemctl的二进制文件和库文件的安装位置 | whereis systemctl |
cd /etc/systemd/system | 进入systemctl文件配置目录 | cd /etc/systemd/system |
配置文件的区块
Unit
通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 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
用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。
- Type:定义启动时的进程行为。它有以下几种值。
- Type=simple:默认值,执行ExecStart指定的命令,启动主进程
- 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 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + - .wants后缀构成的子目录中
- RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
- Alias:当前 Unit 可用于启动的别名
- Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit
举例
[Unit]
Description=Yii Queue Worker (xxx) %I
After=network.target
After=mysql.service
Requires=mysql.service
[Service]
ExecStart=/usr/local/php7.3/bin/php /xxx/yii queue-sms/listen --verbose
Restart=on-failure
[Install]
WantedBy=multi-user.target
通用命令
命令 | 命令介绍 | 具体用法 |
---|---|---|
systemctl reboot | 重启系统 | systemctl reboot |
systemctl status | 显示系统状态 | systemctl status |
systemctl status application.service | 显示单个 Unit 的状态 | systemctl status application.service(如:systemctl status nginx.service) |
systemctl is-active application.service | 显示某个 Unit 是否正在运行 | systemctl is-active application.service (如:systemctl is-active nginx.service) |
systemctl is-failed application.service | 显示某个 Unit 是否处于启动失败状态 | systemctl is-failed application.service |
systemctl is-enabled application.service | 显示某个 Unit 服务是否开机自启动 | systemctl is-enabled application.service |
systemctl enable application.service | 设置开机启动 | systemctl enable application.service |
systemctl disable application.service | 取消开机启动 | systemctl disable application.service |
systemctl start application.service | 立即启动一个服务 | systemctl start application.service |
systemctl stop application.service | 立即停止一个服务 | systemctl stop application.service |
systemctl restart application.service | 重启一个服务 | systemctl restart application.service |
systemctl kill application.service | 杀死一个服务的所有子进程 | systemctl kill application.service |
systemctl reload application.service | 重新加载一个服务的配置文件 | systemctl reload application.service |
systemctl daemon-reload | 重载所有修改过的配置文件 | systemctl daemon-reload |
补充命令
命令 | 命令介绍 | 具体用法 |
---|---|---|
systemd-analyze | 查看启动耗时 | systemd-analyze |
systemd-analyze blame | 查看每个服务的启动耗时 | systemd-analyze blame |
systemd-analyze critical-chain | 显示瀑布状的启动过程流 | systemd-analyze critical-chain |
systemd-analyze critical-chain application.service | 显示指定服务的启动流 | systemd-analyze critical-chain application.service (如:systemd-analyze critical-chain nginx.service) |
systemctl list-units | 列出正在运行的 Unit | systemctl list-units |
systemctl list-units --all | 列出所有Unit,包括没有找到配置文件的或者启动失败的 | systemctl list-units --all |
systemctl list-units --all --state=inactive | 列出所有没有运行的 Unit | systemctl list-units --all --state=inactive |
systemctl list-units --failed | 列出所有加载失败的 Unit | systemctl list-units --failed |
systemctl list-units --type=service | 列出所有正在运行的、类型为 service 的 Unit | systemctl list-units --type=service |
systemctl list-dependencies (–all) application.service | 列出一个 Unit 的所有依赖 | systemctl list-dependencies (–all) application.service |