systemctl理解
Linux 服务管理两种方式service和systemctl。
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl。
systemctl命令兼容了service。
systemctl命令管理systemd的资源Unit
systemd的Unit放在目录/usr/lib/systemd/system(Centos)或/etc/systemd/system(Ubuntu)。
主要有四种类型文件.mount,.service,.target,.wants。
.mount文件
.mount文件定义了一个挂载点,[Mount]节点里配置了What,Where,Type三个数据项。
等同于以下命令:
mount -t hugetlbfs /dev/hugepages hugetlbfs
.service文件
.service文件定义了一个服务,分为[Unit],[Service],[Install]三个小节。
[Unit]
Description:描述。
After:在network.target,auditd.service启动后才启动。
ConditionPathExists: 执行条件。
[Service]
EnvironmentFile:变量所在文件。
ExecStart: 执行启动脚本。
Restart: fail时重启。
[Install]
Alias:服务别名。
WangtedBy: 多用户模式下需要的。
.target文件
.target定义了一些基础的组件,供.service文件调用。
.wants文件
.wants文件定义了要执行的文件集合。
每次执行,.wants文件夹里面的文件都会执行。
常用命令
查看版本号
systemctl --version 查看版本号
管理服务(unit)
systemctl [command] [unit]
command 主要有:
start 立刻启动后面接的 unit。
stop 立刻关闭后面接的 unit。
restart 重启 unit,亦即执行 stop 再 start 的意思。
reload 不关闭 unit 的情况下,重新载入配置文件,让设置生效。
enable 设置下次开机时,后面接的 unit 会被启动。
disable 设置下次开机时,后面接的 unit 不会被启动。
status 目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。
is-active 目前有没有正在运行中。
is-enable 开机时有没有默认要启用这个 unit。
kill 不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。
show 列出 unit 的配置。
mask 注销 unit,注销后你就无法启动这个 unit 了。
unmask 取消对 unit 的注销。
列举已经启动的unit
systemctl list-units(或者直接 systemctl)
有5列,分别为UNIT、LOAD、ACTIVE、SUB、DESCRIPTION
UNIT 项目的名称,包括各个 unit 的类别(看扩展名)。
LOAD 开机时 unit 的配置是否被加载。
ACTIVE 目前的状态,须与后续的 SUB 搭配!就是我们用 systemctl status 观察时,active的内容。
DESCRIPTION 描述信息。
查看系统上一共装了多个unit
systemctl list-unit-files
只查看某种类型的unit
比如我们只查看服务类型的unit:
systemctl list-units --type=service -all
查看加载失败的 unit
如果发现某个 unit 不工作,可以查看是否有 unit 加载失败:
systemctl --failed
管理不同的操作环境(target unit)
systemctl [command] [unit.target]
command 有:
get-default 取得目前的 target
set-default 设置后面接的 target 成为默认的操作模式
isolate 切换到后面接的模式。
查看系统中默认有多少种 target
systemctl list-units --type=target -all
在此仅介绍几个常用的 target:
graphical.target 就是文字界面再加上图形界面,这个 target 已经包含了下面的 multi-user.target。
multi-user.target 纯文本模式!
rescue.target 在无法使用 root 登陆的情况下,systemd 在开机时会多加一个额外的临时系统,与你原本的系统无关。这时你可以取得 root 的权限来维护你的系统。
emergency.target 紧急处理系统的错误,在无法使用 rescue.target 时,可以尝试使用这种模式!
shutdown.target 就是执行关机。
getty.target 可以设置 tty 的配置。
正常的模式是 multi-user.target 和 graphical.target 两个。
救援方面的模式主要是 rescue.target 以及更严重的 emergency.target。
如果要修改可提供登陆的 tty 数量,则修改 getty.target。
为了方便起见,systemd 提供了几个简单的指令用来切换操作模式,大致如下所示:
systemctl poweroff 系统关机
systemctl reboot 重新开机
systemctl suspend 进入暂停模式
systemctl hibernate 进入休眠模式
systemctl rescue 强制进入救援模式
systemctl emergency 强制进入紧急救援模式
检查 unit 之间的依赖性
很多服务之间是有依赖关系的,systemd 的一大亮点就是可以管理 unit 之间的依赖关系。
systemctl list-dependencies [unit] [--reverse]
--reverse 会反向追踪是谁在使用这个 unit