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目标对应表放入下面,结果如下:

アーキテクチャCentOS6のランレベルCentOS7のsystemdシステム停止0systemctl isolate poweroff.targetシングルユーザーモード1systemctl isolate rescue.targetマルチユーザーモード3systemctl isolate multi-user.targetグラフィカルログイン5systemctl isolate graphical.targetOSの再起動6systemctl isolate reboot.target緊急モード
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 start ${Unit}ユニット(サービス)停止systemctl stop ${Unit}ユニット(サービス)再起動systemctl restart ${Unit}ユニット(サービス)リロードsystemctl reload ${Unit}ユニット(サービス)ステータス表示systemctl status ${Unit}ユニット(サービス)自動起動有効systemctl enable ${Unit}ユニット(サービス)自動起動無効systemctl disable ${Unit}ユニット(サービス)自動起動設定確認systemctl is-enabled ${Unit}ユニット(サービス)一覧systemctl list-unit-files –type=service設定ファイルの再読込systemctl daemon-reload

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的功能。

操作コマンド全ログの表示journalctl特定のサービスのログ表示journalctl -u ${Unit}最新のログ表示journalctl -f

查看Jounald日志的情况

查看日志的情况在jounald上非常方便,特别是当服务器发生故障时,我们无法确定日志输出到哪个文件,或者只想查看特定时间范围内的所有日志时。

journald日志的注意事项

使用journald和rsyslog设置的日志会被重复保存两次,但是当服务器重新启动时,journald的日志会消失。

如果希望保存日志记录,可以选择使用rsyslog来存储日志或更改journald的设置并重新启动,以保证日志记录的保存。

bannerAds