一、简介
1.1 概述
Systemctl 是一个 systemd 工具,主要负责控制 systemd 系统和服务管理器。Systemd 是一个系统管理守护进程、工具和库的集合,其功能是用于集中管理和配置类 UNIX 系统。在 Linux 生态系统中,Systemd 被部署到了大多数的标准 Linux 发行版中,只有为数不多的几个发行版尚未部署。systemd 所管理的所有系统资源都称作Unit,通过systemd命令集可以方便的对这些Unit进行管理,比如systemctl、hostnamectl、timedatectl、localctl等命令。
1.2 安装及基础操作
Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。systemctl
是 Systemd 的主命令,通过其可以检查系统上是否安装了Systemd 以及当前安装的 Systemd 的版本是什么,执行如下命令:
[root@centos-linux-8 ~]# systemctl --version
systemd 239 (239-51.el8_5.2)
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy
从上面的例子可以清楚地看出,我们已经安装了systemd 239版本。
二、Systemd 基本使用
2.1 systemctl
systemctl
是 Systemd 的主命令,用于管理系统。
# 重启系统
sudo systemctl reboot
在实际工作中,systemctl 更多用于控制和管理服务,例如启动、停止、重新加载、重启服务、检查服务状态、启用/禁用服务等,如下表所示:
命令 | 说明 |
---|---|
systemctl is-active serviceName.service | 查询服务是否开机启动 |
systemctl enable serviceName.service | 开机运行服务 |
systemctl disable serviceName.service | 取消开机运行 |
systemctl start serviceName.service | 启动服务 |
systemctl stop serviceName.service | 停止服务 |
systemctl restart serviceName.service | 如果服务没有启动,就启动它 |
systemctl reload serviceName.service | 重新加载服务配置文件 |
systemctl status serviceName.service | 查询服务运行状态 |
systemctl list-unit-files | 列出所有可用的服务 |
systemctl list-units | 列出所有运行服务 |
systemctl --failed | 显示启动失败的服务 |
serviceName.service代表某服务的名称,而且.service可以省略不写
2.2 systemd-analyze
systemd-analyze
命令用于查看启动耗时。
# 查看启动耗时
systemd-analyze
# 查看每个服务的启动耗时
systemd-analyze blame
# 显示瀑布状的启动过程流
systemd-analyze critical-chain
# 显示指定服务的启动流
systemd-analyze critical-chain atd.service
2.3 hostnamectl
hostnamectl
命令用于查看当前主机的信息。
[root@centos-linux-8 ~]# hostnamectl
Static hostname: centos-linux-8
Pretty hostname: Centos Linux 8
Icon name: computer-vm
Chassis: vm
Machine ID: 25bc1e6a428dc54b91330ec762d168bb
Boot ID: 2be9f5a147ae444cbaef6b92080b09e5
Virtualization: kvm
Operating System: CentOS Linux 8
CPE OS Name: cpe:/o:centos:centos:8
Kernel: Linux 4.18.0-348.7.1.el8_5.x86_64
Architecture: x86-64
2.4 localectl
localectl
命令用于查看本地化设置。
[root@centos-linux-8 ~]# localectl
System Locale: LANG=zh_CN.utf8
VC Keymap: cn
X11 Layout: cn
2.5 timedatectl
timedatectl
命令用于查看当前时区设置,也可以通过命令:timedatectl list-timezones
获取所有可用的时区。
[root@centos-linux-8 ~]# timedatectl
Local time: 日 2022-08-28 22:06:45 CST
Universal time: 日 2022-08-28 14:06:45 UTC
RTC time: 日 2022-08-28 14:06:44
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
2.6 loginctl
loginctl
命令用于查看当前登录的用户。
# 查看当前登录的用户
[root@centos-linux-8 ~]# loginctl
SESSION UID USER SEAT TTY
4 0 root seat0 tty2
6 0 root
2 sessions listed.
# 当前登录用户
[root@centos-linux-8 ~]# loginctl list-users
UID USER
0 root
1 users listed.
三、附录
3.1 服务状态
这里我们可以先试用下面这个指令查看一下atd服务的当前状态,指令和结果如下:
看到高亮的那个没有,这就是当前服务的状态。那么服务有哪几种常见的状态呢,这里列举说明一下。
状态 | 说明 |
---|---|
active(running) | 正有一个或多个程序正在系统中执行 |
active(exited) | 仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行 |
active(waiting) | 正在执行当中,不过还需要等待其他的事件才能继续处理 |
inactive | 这个服务目前没有运行 |
dead | 程序已经清除 |
上面是运行结果中,还圈出了一个地方,那个是啥?那个其实是这只服务程序的启动状态,也分为一下几种状态。
状态 | 说明 |
---|---|
enabled | 服务将在开机时被执行 |
disabled | 服务在开机时不会被执行 |
static | 服务不会自启动,但可能会被其他服务来唤醒 |
mask | 服务无论如何都无法被启动,因为已经被强制注销 |
3.2 systemctl 配置文件
对于支持 systemd 的服务来说,在其安装的时候,会自动的在 /usr/lib/systemd/system 目录添加一个配置文件。例如 mysql 服务的配置文件 mysqld.service就是位于此目录下,其他的服务也同样位于此目录下,只不过具体的文件名不一样。服务是根据它的配置来启动和停止的,我们使用编辑器或者使用 systemctl cat 服务名
查看服务的配置文件, 下面我们以 sshd 服务的配置文件来说明。
[root@centos-linux-8 ~]# systemctl cat sshd
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target