前言
在学习的过程中发现使用systemctl还是比较常用的,但没有系统的总结过,这里简单整理一下,充分理解一下systemctl
systemd和systemctl
systemd
和 systemctl
是紧密相关的,但它们在功能和用途上有所不同。理解它们之间的关系有助于更好地管理和使用 Linux 系统。
systemd
是一个系统和服务管理器,负责启动和管理 Linux 系统中的各种服务和进程。它是一个初始化系统(init system),在系统启动时负责启动和配置各种服务,并在系统运行时管理这些服务的生命周期。
systemctl
是 systemd
的命令行工具,用于与 systemd
交互,管理和控制 systemd
管理的系统和服务。systemctl
提供了一系列命令,用于启动、停止、重启服务,检查服务状态,启用或禁用服务,以及管理系统的启动目标(targets)等。
关系
-
systemd
是核心系统和服务管理器:systemd
负责启动和管理系统的各个服务和进程。- 它在系统启动时初始化系统,并在系统运行时管理服务的启动、停止和重启。
systemd
使用.service
文件来定义和管理服务,这些文件包含了服务的启动命令、依赖关系、启动顺序等信息。
-
systemctl
是systemd
的命令行接口:systemctl
是一个命令行工具,用于与systemd
交互。- 通过
systemctl
,用户可以执行各种管理任务,如启动、停止、重启服务,检查服务状态,启用或禁用服务,管理系统的启动目标等。 systemctl
提供了丰富的命令和选项,使得管理和控制systemd
管理的系统和服务变得简单和高效。
好处
- 平行处理所有服务,加速开机流程:旧的init启动脚本(System V的那个)是“一项一项任务依序启动”的模式,因此不相依的服务也是得要一个一个的等待。而systemd可以让所有的服务同时启动,毕竟目前我们的硬件主机系统与操作系统几乎都支持多核心架构,因此你会发现到,系统启动的速度变快了;
- 一经请求就响应的on-demand启动方式:systemd仅有一只systemd服务搭配systemctl指令进行处理,无须其他额外的指令来支持。不像systemV还要init,chkconfig,service...等等指令。此外,systemd由于常驻内存,因此任何请求(on-demand)都可以立即处理后续的daemon启动的任务;
- 服务关联性的自我检查:由于systemd可以自行进行服务关联性的检查,因此如果B服务的启动前提是A服务,那当你在没有启动A服务的情况下仅手动启动B服务时,systemd会自动帮你启动A服务;
- 根据daemon功能分类:systemd旗下管理的服务非常多,为了理清所有服务的功能,因此,首先systemd先定义所有的服务为一个服务单位(unit),并将该unit分类到不同的服务类型(type)中。systemd将服务单位(unit)区分为service,socket,target,path,snapshot,timer等多种不同的类型(type);
- 将多个daemons集合成为一个群组:systemd将许多的功能集合成为一个所谓的target项目,这个项目主要用于设计操作环境的创建,所以集合了许多的daemons(执行某个target就是执行多个daemon);
- 向下相容旧有的init服务脚本:基本上,systemd是可以兼容init的启动脚本,因此,旧的init启动脚本也能够通过systemd来管理,当然了,这里仅限于不使用systemd的某些高级功能;
常用的 systemctl
命令
以下是一些常用的 systemctl
命令示例:
-
范列出系统上面有启动的unit:
systemctl
-
启动、停止和重启服务:
-
sudo systemctl start <service> sudo systemctl stop <service> sudo systemctl restart <service>
-
检查服务状态:
systemctl status <service>
-
启用和禁用服务:
sudo systemctl enable <service> sudo systemctl disable <service>
-
查看系统启动目标:
systemctl list-units --type=target
-
切换系统启动目标:
sudo systemctl isolate <target>
-
查看系统日志:
journalctl
-
查看特定服务的日志:
journalctl -u <service>
-
查看系统启动时间:
systemd-analyze
-
查看系统启动过程中的详细信息:
systemd-analyze blame
还有很多很多的操作如果用到的话自行查找
示例
假设你有一个名为 my-service
的服务,以下是一些常见的 systemctl
命令示例:
-
启动服务:
sudo systemctl start my-service
-
停止服务:
sudo systemctl stop my-service
-
重启服务:
sudo systemctl restart my-service
-
检查服务状态:
systemctl status my-service
-
启用服务(使其在系统启动时自动启动):
sudo systemctl enable my-service
-
禁用服务(使其不在系统启动时自动启动):
sudo systemctl disable my-service