Systemd 入門ガイド:コマンド編

Systemd 入門ガイド:実践編

Systemd 入門ガイド:コマンド編

著者: 阮一峰:阮一峰(阮一峰)

日付: 2016年3月7日 2016年3月7日

Systemd はLinuxシステムツールで、起動用です。 プロセスを監視するプログラム 多くのリリース版の標準設定となりました。

本文はその基本的な使い方を紹介し、上下の二篇に分けられています。今日は主なコマンドについて紹介します。 次のページ 実際に使う方法を紹介します。 img

一、由来:由来(由来)

歴史上、 リナックスの起動 ずっと採用しています init プロセス。

以下のコマンドでサービスを起動します。

この方法には二つの欠点があります。

一是起動時間が長い。 init プロセスはシリアルで起動し、前のプロセスが終わるまで次が始まりません。

二に、スクリプトの起動が複雑です。 init プロセスは起動スクリプトを実行するだけで、他のことはしない。スクリプトは自分で様々な状況を処理する必要があり、そのためスクリプトは長くなる。

2. Systemd 概要

Systemdはこれらの問題を解決するために生まれました。その設計の目的は、システムの起動と管理に包括的な解決策を提供することです。

Linuxの慣習に従って、アルファベット d デーモンの略です。Systemdという名前は、システム全体を守ることを意味しています。

img

上図はSystemdの作者です Lennart Poettering

Systemdを使用するので、もう必要ありません。 init Systemdを取って代わった。 initd システムの最初のプロセス(PIDは1)となり、他のプロセスはそのプロセスのものとされます。

上のコマンドで Systemd のバージョンを確認します。

Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的 Unixの哲学 img

(上図は Systemd 架構図です)

③ システム管理

Systemdは単一のコマンドではなく、システム管理に涉及するコマンド群です。

3.1 systemctl

systemctl Systemdのメインコマンドで、システムを管理します。

3.2 systemd-analyze

systemd-analyze 起動時間を確認するコマンドです。

3.3 hostnamectl

hostnamectl コマンドは、現在のホストの情報を表示します。

3.4 localectl

localectl 创建コマンドを使用してローカライズ設定を確認します。

3.5 timedatectl

timedatectl コマンドは現在の時帯設定を確認するために使用されます。

3.6 loginctl

loginctl コマンドは現在ログインしているユーザーを確認するために使われます。

4、ユニット

4.1 範囲/意味

Systemdはすべてのシステムリソースを管理できます。異なるリソースは「ユニット」と総称されます。

ユニットは12種類に分かれています。

  • サービスユニット:システムサービス
  • ターゲットユニット:複数のユニットで構成されるグループ
  • デバイス・ユニット:ハードウェアデバイス
  • マウントユニット:ファイルシステムのマウントポイント
  • 自動マウントユニット:オートマウントユニット
  • パスユニット:ファイルまたはパス
  • Scope Unit:Systemdで起動されていない外部プロセス
  • スライスユニット:プロセスグループ
  • スナップショットユニット:システムドのスナップショット、特定のスナップショットに戻せる
  • ソケットユニット:プロセス間通信のソケット
  • Swap Unit:スワップファイル
  • タイマーベースユニット

systemctl list-units コマンドで現在のシステムのすべてのユニットを確認できます。

4.2 ユニットの状態

systemctl status コマンドは、システム状態と個々のユニットの状態を確認するために使用されます。

除えて status 命令:命令です。 systemctl 3つのクエリ状態の簡単な方法を提供しました。主にスクリプト内の判定文で使用されます。

4.3 ユニット管理

ユーザーが最もよく使うコマンドは以下の通りです。これらはUnit(主にservice)を起動・停止するためのものです。

依存関係

ユニット間に依存関係:AがBに依存する場合、SystemdはAを起動するときにBも同時に起動します。

systemctl list-dependencies Unitの全ての依存関係をリストアップしてください。

上記のコマンドの出力結果の中には、ターゲットタイプの依存関係があります(詳細は以下を参照してください)。デフォルトでは、ターゲットは展開されません。ターゲットを展開するには、次のようにします: --all パラメータ。

5. Unitの設定ファイル

5.1 概要

各 Unit には設定ファイルがあり、それが Systemd に Unit の起動方法を指示します。

systemdデフォルトのディレクトリ /etc/systemd/system/ 設定ファイルを読み込みます。しかし、その中には多くのシンボリックリンクがあり、それがディレクトリを指しています。 /usr/lib/systemd/system/ 実際の設定ファイルはそのディレクトリにあります。

systemctl enable コマンドは、その2つのディレクトリ間にシンボリックリンクを作成するために使用されます。

設定ファイルで起動時の開始が設定されていました。 systemctl enable コマンドは起動のトリガーに相当します。

それに対して、 systemctl disable コマンドは、2つのディレクトリ間のシンボリックリンクを解除するために使用され、起動時のロードを解除するのに相当します。

設定ファイルの拡張子は、その Unit の種類を示します。例えば、 sshd.socket 省略すると、Systemdのデフォルトの接尾辞は .service だからって sshd 誤解されるかも sshd.service

5.2 設定ファイルの状態

systemctl list-unit-files コマンドはすべての設定ファイルをリストします。

このコマンドはリストを出力します。

このリストは各設定ファイルの状態を示しており、合計で4種類あります。

  • enabled: 启動リンク已建立
  • 未設定:起動リンク未設定
  • static:この設定ファイルはありません [Install] (実行不可)、他の設定ファイルの依存関係としてのみ利用可
  • マスクド:この設定ファイルはスタートリンクの作成が禁止されています

注意:設定ファイルの状態から、このUnitが運行中かどうかは分かりません。これは前面で述べたことと同じです。 systemctl status 命令です。

設定ファイルを変更したら、SystemDが設定ファイルを再読み込みし、再起動させる必要があります。それしないと変更は反映されません。

5.3 設定ファイルの形式

設定ファイルは通常のテキストファイルで、テキストエディタで開けます。

systemctl cat コマンドで設定ファイルの内容を確認できます。

上記の表示から、設定ファイルはいくつかのブロックに分かれています。各ブロックの最初の行は、括弧で示される識別名で、例えば: [Unit] 注意:設定ファイルのブロック名とフィールド名は、大文字小文字が区別されます。

各ブロック内には、等号で結ばれたキー値対があります。

5.4 設定ファイルのブロック

[Unit] ブロックは通常、設定ファイルの最初のブロックで、Unitのメタデータや他のUnitとの関係を定義するために使用されます。主なフィールドは以下の通りです。

  • Dsecription 簡潔に説明
  • Documentation :ドキュメントのURL
  • Requires 現在の Unit が依存する他の Unit が動作していない場合、現在の Unit の起動に失敗します。
  • Wants 現在の Unit と連携している他の Unit が動作していない場合、現在の Unit は起動失敗しません。
  • BindsTo :と Requires 類似で、指定されたUnitが退出すると、現在のUnitの動作が停止します
  • Before :指定のUnitが起動する場合、そのUnitは現在のUnitの後で起動する必要があります。
  • After :指定のUnitが起動する必要がある場合、そのUnitは現在のUnitより前に起動する必要があります。
  • Conflicts 指定のUnitは現在のUnitと同時に実行できません。
  • Condition... 現在の Unit が実行するための必須条件、それが満たされないと実行されません。
  • Assert... 現在のUnitの動作には満たす必要のある条件があります。それが満たされないと、起動失敗が報告されます。

[Install] 通常は設定ファイルの最後のセクションで、起動方法や自動起動の有無を定義します。主なフィールドは以下の通りです。

  • WantedBy その値は、ターゲットの1つまたは複数です。現在のユニットが有効(enable)時、シンボリックリンクが格納されます。 /etc/systemd/system カタログの下に Target 名 + .wants 接尾辞で作成されたサブディレクトリ
  • RequiredBy その値は1つ以上のTargetで、現在のUnitがアクティブな際にシンボリックリンクが設定されます。 /etc/systemd/system カタログの下に Target 名 + .required 接尾辞で作成されたサブディレクトリ
  • Alias 現在の Unit が利用できるエイリアス
  • Also 現在の Unit 活動(有効)中、同時に活性化される他の Unit

[Service] ブロックはServiceの設定に用い、Service型のUnitのみがこのブロックを持っています。主要なフィールドは以下の通りです。

  • Type プロセスの起動時の挙動を定義します。以下の値があります。
  • Type=simple デフォルト値、実行 ExecStart 指定のコマンドでメインプロセスを起動します。
  • Type=forking 親プロセスからforkメソッドで子プロセスを作成し、作成後親プロセスはすぐに終了します。
  • Type=oneshot 一時的なプロセス、Systemdは現在のサービスが終了するまで待ち、その後続行します
  • Type=dbus 現在のサービスはD-Busで起動しています。
  • Type=notify 現在サービスが開始されました。通知します。 Systemd さらに下に進む。
  • Type=idle 他のタスクが終わったら、そのサービスが動く。
  • ExecStart 現在のサービスを起動するコマンド
  • ExecStartPre サービスを開始する前に実行するコマンド
  • ExecStartPost サービスを開始後の実行コマンド
  • ExecReload 現在のサービスを再起動する際に実行するコマンド
  • ExecStop 現在のサービスを停止する際に実行するコマンド
  • ExecStopPost サービス停止後の命令を停止
  • RestartSec 現在のサービスの自動再起動の間隔(秒)
  • Restart Systemdが自動でサービスを再起動する定義される条件:可能な値は以下の通りです。 always いつも再起動、 on-success on-failure on-abnormal on-abort on-watchdog
  • TimeoutSec Systemdが現在のサービスを停止する前に待つ秒数を定義
  • Environment 指定環境変数

Unit設定ファイルの完全なフィールドリストは、参照してください。 公式文書

⑥ ターゲット

コンピュータの起動時に多くの Unit を起動する必要があります。毎回、起動する Unit を一つずつ指定するのは非常に不便です。Systemd は、その解決策として Target を提供しています。

简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说,Target这个概念类似于"状态点",启动某个 Target 就好比启动到某种状态。

伝統的 init 起動モードには RunLevel という概念があり、Targetと似ているが、RunLevelは排他で複数が同時に起動できない。一方で、複数のTargetは同時に起動可能。

ターゲットと伝統的なRunLevelの対応関係は以下の通りです。

それは init 進行の主な違いは以下の通りです。

デフォルトのRunLevel (在 /etc/inittab (ファイル設定)は今やデフォルトのターゲットに置き換えられました。場所は /etc/systemd/system/default.target 当然、一般的に、シンボリックリンクは graphical.target (グラフィックユーザインターフェース)または multi-user.target (マルチユーザーコマンドライン)

(2)スクリプトの起動場所 以前は、 /etc/init.d 目次、シンボリックリンクは異なるRunLevelディレクトリに指している(例えば) /etc/rc3.d /etc/rc5.d 現在は、(ここに)、所蔵されています。 /lib/systemd/system 「わ」 /etc/systemd/system 目次。

(3)設定ファイルの場所 以前:以前に init プロセスの設定ファイルは /etc/inittab 各種サービスの設定ファイルは、 /etc/sysconfig 目次。現在の設定ファイルは主に以下に保存されています。 /lib/systemd 目次、在 /etc/systemd 目次の修正は元の設定を上書きできます。

第七、ログ管理

SystemdがすべてのUnitの起動ログを統一管理します。これにより、利用できる利点は次の通りです: journalctl 一つのコマンドで、すべてのログ(カーネルログおよびアプリケーションログ)を確認します。ログの設定ファイルは /etc/systemd/journald.conf

journalctl 機能豊富、用途多岐にわたる。

(終了)

文書情報

最近使用した:

収蔵 メニュー QQ