systemctl 命令可以进行对系统服务的管理
systemd和systemctl的概述
-
- systemdはLinuxで利用されるデファクトスタンダードな初期化システムで、システムの起動時に各種サービスを立ち上げる役割を担います。
-
- systemctlは、systemdの制御や管理のためのコマンドラインツールで、サービスの起動・停止・再起動や状態確認など、さまざまな操作ができるものです。
- CentOS6 までは Linux 起動時の最初に動く “PID が 1 のプロセス” は init でしたが、CentOS7以降 は systemd となっています。
systemd的功能
具体而言,systemd所执行的操作如下。
-
- Linuxシステムの初期化
-
- サービス管理
- ログ管理
systemd的作用是读取称为“单元”的配置文件,以适当的顺序启动和管理各种服务和任务。
这个单元中包含了服务(service)、计时器(timer)和套接字(socket)等各种功能,并且每个功能都有特定的作用。例如,如果要启动SSH服务器,则存在名为sshd.service的单元,systemd会使用该单元来管理SSH服务器。
systemd的优点
相较传统的 init 系统,systemd 具有以下优点。
-
- 起動速度の向上: 依存関係を解決し、同時並行でサービスを起動
-
- サービス管理の柔軟性: サービスの再起動やデーモンの再ロードが容易
- 依存関係の自動解決: サービス間の依存関係を自動的に検出し、必要な順序で起動
init(service command)与之不同的地方
CentOS6 之前,采用了 init 作为启动守护进程和应用程序等进程的机制。这个 init 初始化程序有两个分支,一个是 BSD 系列的 UNIX 系统,另一个是 System V 系列的 UNIX 系统。在 CentOS6 之前,采用的是类似于 System V 系列 UNIX 系统的 init。
System V系UNIX的init的优点在于,通过称为运行级别的值,可以简单地改变系统的状态,并且注册与操作系统启动和停止相关的守护进程和程序非常容易。
然而,作为缺点,还存在以下几个方面的问题。
-
- デーモンやアプリケーション数が増加すると、起動、停止順序の管理や制御が複雑になる。
-
- initからの起動は、並列処理がされないため、数が増えるとOSの起動処理時間が長くなる。
- プロセスの親子関係が崩れた場合、子プロセスの挙動を適切に制御できない。
因此,從CentOS7開始,我們採用systemd作為取代init的機制。systemd的主要優點如下所示。
-
- 従来必要だったアプリケーションの起動、停止スプリクトが不要。
-
- 起動処理を並列処理できるので、OSの起動、停止を素早く行える。
- 親子関係にあるプロセスの起動と停止制御を適切に行える。
在CentOS7中,引入了名为”目标”的概念来替代之前的运行级别。目标指的是systemd中将多个服务(守护进程)等组合在一起进行统一管理的实体。
如果将CentOS6系列的运行级别和CentOS7的systemd目标对应表放入下面,结果如下:
systemctl isolate emergency.target
您还可以使用命令来确认在CentOS7中定义的各种目标与传统的CentOS中采用的运行级别中的哪一个相对应。
列出/lib/systemd/system/runlevel*target目录下的文件详细信息。
[root@vbox ~]# ls -l /lib/systemd/system/runlevel*target
lrwxrwxrwx 1 root root 15 1月 12 2023 /lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx 1 root root 13 1月 12 2023 /lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx 1 root root 17 1月 12 2023 /lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx 1 root root 17 1月 12 2023 /lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx 1 root root 17 1月 12 2023 /lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx 1 root root 16 1月 12 2023 /lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx 1 root root 13 1月 12 2023 /lib/systemd/system/runlevel6.target -> reboot.target
传统的init系统使用Shell脚本来按顺序执行系统启动时的服务。相比之下,systemd使用二进制格式的单元文件,可以明确表示依赖关系。此外,systemd将整个系统的状态管理集中在一处,使得系统管理更高效。
systemctl的基本用法
systemctl命令的语法(启动、停止、重启、重新加载服务)。
systemctl的基本命令语法如下。restart(重新启动服务)和reload(重新加载配置)的主要区别在于它们在失败时的行为不同。重新启动失败通常是由于停止成功但启动失败,所以在正确启动之前会发生服务停止。而重新加载失败的情况下,由于没有停止,可以继续以先前的配置状态进行启动。
systemctl [选项] [命令] [单元名称]
经常使用的命令
systemctl status 命令的使用方法
-
- 起動中の場合はActive:の項目が緑色で active (running) と表示されます。
-
- 起動しておらず、起動失敗もしていない場合は Active: の項目が inactive (dead) と表示されます。
- 起動失敗した場合は Active: の項目が赤字で failed と表示されます。その他問題個所が赤字で表示されます。
运行和退出的区别
当使用systemctl status命令来检查启动状态时,可能会出现正在运行的服务为Active (running),也可能会显示为Active (exited)。这种差异是什么原因呢?
简单来说,”running” 指的是像 “httpd” 或 “postfix” 这样的服务状态,它们始终处于等待客户端访问的状态。它们一直处于战斗模式。
一方的「待机状态」指的是,在服务启动时首先运行的处理完成后,等待下一个调用机会的状态。虽然响应较慢,但一旦收到请求则会进行响应。
查看日志
在systemd环境中,journald负责收集系统和服务的日志。journald首先接收系统上的日志,然后根据需要将日志转发到rsyslog。由systemd启动的单元的日志(即journald的日志)会以二进制格式保存在/var/log/journal目录下。因此,我们可以使用journalctl命令来查看日志,同时使用”-f”参数可以实现类似于tail -f的功能。
查看Jounald日志的情况
查看日志的情况在jounald上非常方便,特别是当服务器发生故障时,我们无法确定日志输出到哪个文件,或者只想查看特定时间范围内的所有日志时。
journald日志的注意事项
使用journald和rsyslog设置的日志会被重复保存两次,但是当服务器重新启动时,journald的日志会消失。
如果希望保存日志记录,可以选择使用rsyslog来存储日志或更改journald的设置并重新启动,以保证日志记录的保存。