Systemd笔记
Systemd管理的启动脚本位于 /usr/lib/systemd/system/ 下
Systemd启动顺序约定为: 当前服务满足启动条件, 则立即创建进程进行并行启动, 启动条件指服务的依赖关系(Requires, Wants)和顺序关键字(After, Before)等
# 查看启动的服务, 再加上 --all 参数可以列出未启动的服务 systemctl list-units # 列出服务配置文件, 如果只看服务, 可以加上 --type=service # 状态有4种: enabled:已建立启动链接, disabled:没建立启动链接, static:没有[Install]部分,只作为其他配置的依赖, masked:被禁止建立启动链接 systemctl list-unit-files # 查看当前系统的所有 Target $ systemctl list-unit-files --type=target # 查看启动时的默认 Target systemctl get-default # 设置启动时的默认 Target systemctl set-default multi-user.target # 切换Target时默认不关闭前一个Target启动的进程, 而用isolate命令时会关闭前一个Target里所有不属于后一个Target的进程 systemctl isolate multi-user.target # 查看服务启动的依赖关系, 要列出target里面的详细服务, 需要加上 --all 参数 systemctl list-dependencies some.service
Target 与 传统 RunLevel 的对应关系如下
Traditional runlevel New target name Symbolically linked to... Runlevel 0 | runlevel0.target -> poweroff.target Runlevel 1 | runlevel1.target -> rescue.target Runlevel 2 | runlevel2.target -> multi-user.target Runlevel 3 | runlevel3.target -> multi-user.target Runlevel 4 | runlevel4.target -> multi-user.target Runlevel 5 | runlevel5.target -> graphical.target Runlevel 6 | runlevel6.target -> reboot.target
.Systemd对单个服务的管理
# 显示某个 Unit 是否正在运行 systemctl is-active application.service # 显示某个 Unit 是否启动失败 systemctl is-failed application.service # 显示某个 Unit 服务是否开启了自动启动 systemctl is-enabled application.service # 激活开机启动 systemctl enable application.service # 撤销开机启动 systemctl disable application.service
启动分析
# 查看启动耗时 systemd-analyze # 查看启动各项服务使用的时间 systemd-analyze blame # 显示瀑布状的启动时序 systemd-analyze critical-chain # 显示指定服务的启动时序 systemd-analyze critical-chain sshd.service # 生成服务启动时序svg图 systemd-analyze plot > boot.svg
查看启动日志
# 查看启动日志 journalctl # 查看内核日志 journalctl -k # 查看系统本次启动的日志 journalctl -b journalctl -b -0 # 查看上一次启动的日志(需更改设置) journalctl -b -1 # 查看指定时间的日志 sudo journalctl --since="2012-10-30 18:17:16" sudo journalctl --since "20 min ago" sudo journalctl --since yesterday sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00" sudo journalctl --since 09:00 --until "1 hour ago" # 显示尾部的最新10行日志 sudo journalctl -n # 显示尾部指定行数的日志 sudo journalctl -n 20 # 实时滚动显示最新日志 sudo journalctl -f