systemd 是一套用于 Linux 系统的基本构建块。它提供了一个系统和服务管理器,作为 PID 1 运行并启动系统的其余部分。
systemd 提供了积极的并行化能力,使用套接字和 D-Bus 激活来启动服务,提供守护进程的按需启动,使用 Linux 控制组跟踪进程,维护挂载和自动挂载点,并实现了精心设计的基于事务依赖的服务控制逻辑。systemd 支持 SysV 和 LSB init 脚本,并且可以替代 sysvinit。
其他部分包括日志守护程序、控制基本系统配置(如主机名、日期、区域设置)的实用程序,维护登录用户列表以及运行的容器和虚拟机、系统帐户、运行时目录和设置,以及管理简单网络的守护程序配置、网络时间同步、日志转发和名称解析。
systemd 配置文件存在于以下三个文件夹中:
/etc/systemd/system 存放系统启动的默认级别及启动的unit的软连接,优先级最高。
/run/systemd/system 系统执行过程中产生的服务脚本,优先级次之。
/usr/lib/systemd/system 存放系统上所有的启动文件,优先级最低。
回顾:
Unit 配置文件
systemd 中的 Unit(配置)文件是对 systemd 可以管理的各种单元(包括服务、套接字、设备等)的信息进行编码的文件。本指南侧重于服务,在这种情况下,我们操作的单元文件就是.service文件。该varnish.service设备配置文件包含有关systemd应该如何执行,监控和管理的清漆守护进程的信息。
[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 运行必须满足的条件,否则会报启动失败
[Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。
- WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中
- RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
- Alias:当前 Unit 可用于启动的别名
- Also:当前 Unit 激活(enable)时,会被同时激活的其他 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:指定环境变量
Systemctl 管理工具
CentOS 的程序管理基本上都是由工具 systemctl 完成。
启动服务:
systemctl start name.service
停止服务:
systemctl stop name.service
重启服务:
systemctl restart name.service
查看状态:
systemctl status name.service
条件式重启:
即服务之前是启动的则进行重启,如果服务没有启动则不进行操作
systemctl try-restart name.service
重载或重启:
首先进行重载,如果重载不成功则进行重启
systemctl reload-or-restart name.service
重载或条件式重启:
systemctl reload-or-try-restart name.service
设置服务是否可以被用户设置开机启动状态
systemctl unmask name.service 取消禁止
systemctl mask name.service 禁止
查看服务的当前激活状态:
服务已经启动命令的状态返回值为0 命令未启动命令的状态返回值为非0值
systemctl is-active name.service
查看所有已经激活的服务:
-t 指定显示的unit类型。
--all 显示更加详细的信息列表。
-a 等价 --all
systemctl list-units
systemctl list-units -t service
systemctl list-units -t service -a
查看所有服务:
systemctl list-units -a
查看所有服务状态:
systemctl list-unit-files
-a 、--all : 查看所有服务的状态
-t 、--type :指定需要查看的unit类型
loaded :配置文件已经加载,载入内存
active(running):一次或多次持续处理的运行
active(exited):成功完成一次性的配置
active(waiting):运行中,等待一个事件
inactive:不运行
enabled:开机启动
disabled:开机不启动
static:开机不启动,但可被另一个启用的服务激活
用来列出该服务在哪些运行级别下启用和禁用
ls /etc/systemd/system/*.wants/sshd.service
systemctl list-unit-files --type target --all
设置服务开机不启动:
systemctl disable 服务名称unit
查看服务是否开机自启:
systemctl is-enabled name.service
察看服务的依赖关系:
systemctl list-dependencies name.service
systemctl list-depebdencies
重载服务:
systemctl daemon-reload
杀掉进程:
systemctl kill 进程名
参考资料:
https://blog.csdn.net/weixin_33812433/article/details/92656944
https://docs.varnish-software.com/tutorials/configuring-systemd-services/
https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
https://www.cnblogs.com/mhc-fly/p/8512491.html
|