运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大家喜欢。
今天我们要讲的是 Systemd。
一、简介
systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序。功能包括:支持并行化任务;同时采用 socket 式与 D-Bus 总线式启用服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;支持快照和系统恢复;维护挂载点和自动挂载点;各服务间基于依赖关系进行精密控制。
systemd 支持 SysV 和 LSB 初始脚本,可以替代 sysvinit。除此之外,功能还包括日志进程、控制基础系统配置,维护登陆用户列表以及系统账户、运行时目录和设置,可以运行容器和虚拟机,可以简单的管理网络配置、网络时间同步、日志转发和名称解析等。
二、基本用法
systemctl list-dependencies # 显示单元的依赖关系
systemctl list-sockets # 列出套接字和激活的内容
systemctl list-jobs # 查看活动的 systemd 作业
systemctl list-unit-files # 查看单元文件及其状态
systemctl list-units # 显示单位是否已加载/活动
systemctl get-default # 列出默认目标(如运行级别)
systemctl reboot # 重启系统
systemctl poweroff # 关闭系统
systemctl emergency # 进入紧急模式
systemctl default # 返回默认目标
systemctl stop service # 停止正在运行的服务
systemctl start service # 启动服务
systemctl restart service # 重新启动正在运行的服务
systemctl reload service # 重新加载服务中的所有配置文件
systemctl daemon-reload # 必须运行以重新加载更改的单元文件
systemctl status # 查看服务是否正在运行/启用
systemctl --failed # 显示未能运行的服务
systemctl reset-failed # 将任何单位从失败状态重置
systemctl enable service # 使服务在启动时启动
systemctl disable service # 禁用服务 - 不会在启动时启动
systemctl show service # 显示服务(或其他单元)的属性
systemctl edit service # 创建片段以放入单元文件
systemctl edit --full service # 编辑整个单元文件以进行服务
systemctl -H host status network # 远程运行任何 systemctl 命令
journalctl # 显示所有收集的日志消息
journalctl -u network.service # 查看网络服务消息
journalctl -f # 关注出现的消息
journalctl -k # 仅显示内核消息
三、SysVinit 到 Systemd
Linux服务启动流程取决于所使用的初始化系统,现代Linux发行版中的两个主要初始化系统是systemd和SysVinit。
systemd是红帽7版本(其他如红旗7等相对应版本)及以上版本所普遍使用;SysVinit是7版本以下所普遍使用。顾名思义,systemd被设计用来改进sysvinit的缺点,所谓的升级加强版。systemd的目标是:尽可能启动更少进程;尽可能将更多进程并行启动。systemd尽可能减少对shell脚本的依赖。传统sysvinit使用inittab来决定运行哪些shell脚本,大量使用shell脚本被认为是效率低下无法并行的原因。
Systemd和SysVinit命令对比:
SysVinit | Systemd | 说明 |
service SERVICE_NAME start | systemctl start SERVICE_NAME | 用于启动服务(不重启持久) |
service SERVICE_NAME stop | systemctl stop SERVICE_NAME | 用于停止服务(不永久重启) |
service SERVICE_NAME restart | systemctl restart SERVICE_NAME | 用于停止然后启动服务 |
service SERVICE_NAME reload | systemctl reload SERVICE_NAME | 重新加载配置文件而不中断挂起的操作 |
service SERVICE_NAME condrestart | systemctl condrestart SERVICE_NAME | 如果服务已在运行,则重新启动 |
service SERVICE_NAME status | systemctl status SERVICE_NAME | 判断服务当前是否正在运行 |
chkconfig SERVICE_NAME on | systemctl enable SERVICE_NAME | 打开服务,以便在下次启动时启动,或其他触发器 |
chkconfig SERVICE_NAME off | systemctl disable SERVICE_NAME | 为下次重新启动或任何其他触发器关闭服务 |
chkconfig SERVICE_NAME | systemctl is-enabled SERVICE_NAME | 用于检查服务是否配置为在当前环境中启动 |
chkconfig –list | systemctl list-unit-files –type=service (or) ls /etc/systemd/system/*.wants/ | 打印一个服务表,列出每个配置的运行级别打开或关闭 |
chkconfig –list | grep 5:on | systemctl list-dependencies graphical.target | 打印启动到图形模式时将启动的服务表 |
chkconfig SERVICE_NAME –list | ls /etc/systemd/system/*.wants/ SERVICE_NAME.service | 用于列出此服务配置为打开或关闭的级别 |
chkconfig SERVICE_NAME –add | systemctl daemon-reload | 在创建新服务文件或修改任何配置时使用 |
Systemd和SysVinit目标运行级别对比:
SysVinit | Systemd | 说明 |
0 | runlevel0.target, poweroff.target | 停止系统 |
1, s, single | runlevel1.target, rescue.target | 单用户模式 |
2, 4 | runlevel2.target, runlevel4.target, multi-user.target | 用户定义/站点特定的运行级别。 默认情况下,与 3 相同 |
3 | runlevel3.target, multi-user.target | 多用户,非图形。 用户通常可以通过多个控制台或通过网络登录 |
5 | runlevel5.target, graphical.target | 多用户,图形。 通常具有运行级别 3 的所有服务以及图形登录 |
6 | runlevel6.target, reboot.target | 重启 |
emergency | emergency.target | 应急外壳 |
资料参考:https://systemd.io/