1. systemctl命令简介
systemd is a software suite that provides an array of system components for Linux operating systems. Its main aim is to unify service configuration and behavior across Linux distributions; Its primary component is a “system and service manager”—an init system used to bootstrap user space and manage user processes. It also provides replacements for various daemons and utilities, including device management, login management, network connection management, and event logging.
systemd 是一个软件套件,它为 Linux 操作系统提供一系列系统组件。它的主要目标是统一 Linux 发行版中的服务配置和行为;它的主要组件是“系统和服务管理器”——一个用于引导用户空间和管理用户进程的 init 系统。它还提供各种守护程序和实用程序的替代品,包括设备管理、登录管理、网络连接管理和事件日志记录。
systemd’s core components include the following:
- systemd is a system and service manager for Linux operating systems.
- systemctl is a command to introspect and control the state of the systemd system and service manager. Not to be confused with sysctl.
- systemd-analyze may be used to determine system boot-up performance statistics and retrieve other state and tracing information from the system and service manager.
如wiki所说,systemctl是systemd的一个核心组件,作用是作为命令客户端控制systemd。
在CentOS7中,systemctl命令主要负责控制systemd系统和服务管理器。基本取代了service和chkconfig命令,虽然service和chkconfig命令依然保留,但是据说已经被阉割过。
参考文档:
- systemd
- 《shell命令之journalctl》
- CentOS7/RHEL7 systemd详解
- CentOS7进程管理systemd详解
- Centos7下的systemctl命令与service和chkconfig
- Linux初始化init系统之Sysvinit
- 浅析 Linux 初始化 init 系统(1):sysvinit
- chkconfig和systemctl
2. systemd历史
2.1. Linux启动过程
Linux系统从启动到提供服务的过程是这样,先是机器加电,然后通过MBR或者UEFI加载GRUB,再启动内核,内核启动服务,然后开始对外服务。
SysVinit、UpStart、systemd主要是解决服务引导管理的问题。
2.2. SysVinit
SysVinit是最早的解决方案,依靠划分不同的运行级别,启动不同的服务集,服务依靠脚本控制,并且是顺序执行的。
在CentOS5系统中,配置文件为/etc/inittab
。
SysVinit方案的优点是:原理简单,易于理解;依靠shell脚本控制,编写服务脚本门槛比较低。
缺点是:服务顺序启动,启动过程比较慢;不能做到根据需要来启动服务,比如通常希望插入U盘的时候,再启动USB控制的服务,这样可以更好的节省系统资源。
获取系统运行级别之后,根据运行级别顺序的执行以下位置的启动脚本,从而将系统初始化为预设的运行级别
1 | /etc/rc.d/rc.sysinit 重要的系统初始化服务 |
chkconfig是一个用于维护/etc/rc[0~6].d
目录的命令行工具。
- 等级0:表示关机
- 等级1:表示单用户模式
- 等级2:表示无网络连接的多用户命令行模式
- 等级3:表示有网络连接的多用户命令行模式
- 等级4:表示不可用
- 等级5:表示带图形界面的多用户模式
- 等级6:表示重新启动
2.3. UpStart
为了实现系统服务的即插即用,UpStart应运而生,在CentOS6系统中,SysVinit和UpStart是并存的,UpStart主要解决了服务的即插即用。
对于服务顺序启动慢的问题,UpStart的解决办法是把相关的服务分组,组内的服务是顺序启动,组之间是并行启动。
在CentOS6系统中,配置文件为/etc/inittab
和/etc/init/\*.conf
。
2.4. systemd
随着移动互联网的到来,SysVinit服务启动慢的问题显得越来越突出,许多移动设备都是基于Linux内核,比如安卓。移动设备启动比较频繁,每次启动都要等待服务顺序启动,显然难以接受,systemd就是为了解决这个问题诞生的。
在CentOS7系统中,配置文件为/usr/lib/systemd/system/
和 /etc/systemd/system/
中的文件。
systemd的设计思路是:尽可能的快速启动服务;尽可能的减少系统资源占用。
3. systemctl常用命令
3.1. 启停服务
以启动docker服务为例
1 | systemctl start docker |
以停止docker服务为例
1 | systemctl stop docker |
以重启docker服务为例
1 | systemctl restart docker |
3.2. kill服务
以杀死docker服务为例
1 | systemctl kill docker |
3.3. 查看服务状态
以查看docker服务状态为例
1 | systemctl status docker |
查看 Drop-In
字段,就能找到配置文件位置。
从这个配置文件中,又可以查看到其他配置文件的位置。
查看docker服务状态,日志不截断
1 | systemctl status docker -l |
3.4. 开机自启动
1 | # 开机自启动 |
更多内容参考文档:《Linux服务开机自启动配置》
3.5. 重新加载单元配置
1 | systemctl daemon-reload |
经常和启停服务配合使用。
停止服务 -> 修改单元配置 -> 重新加载单元配置 -> 启动服务
修改单元配置 -> 重新加载单元配置 -> 重启服务
3.6. 重新加载某个单元
1 | systemctl reload docker.service |
3.7. 查看服务参数配置
以查看docker服务的MountFlags配置为例
1 | sudo systemctl show --property=MountFlags docker.service |
3.8. 重新加载配置
以重新加载sshd服务配置为例
1 | systemctl reload sshd |
3.9. 查看所有单元
1 | systemctl list-unit-files |
3.10. 查看所有自启动的单元
1 | systemctl list-unit-files | grep enable |
3.11. 查看某个单元是否开机自启动
1 | systemctl is-enabled docker.service |
3.12. 查看所有活跃的单元
1 | systemctl list-units |
3.13. 查看所有活跃的服务
1 | systemctl list-units -t service |
3.14. 查看所有失败的单元
1 | systemctl --failed |