1. 背景
systemd
これは、Linux オペレーティング システム専用のシステムおよびサービス マネージャーです。スタートアップ プロセス ( ) としてPID=1
実行すると、さまざまなユーザー スペース サービスを開始および維持する初期化システムとして実行されます。
2. 注文
systemd
これはコマンドではなく、システム管理のあらゆる側面に関わる一連のコマンドです。
1. systemctl (システムの管理に使用されるメインコマンド)
systemctl --version
: バージョンを表示します。systemctl reboot
: システムを再起動します。systemctl poweroff
: システムをシャットダウンし、電源を遮断します。systemctl halt
:CPU が動作を停止します。systemctl suspend
: システムを一時停止します。systemctl hibernate
: システムを休止状態にします。systemctl hybrid-sleep
: システムを対話型休止状態にします。systemctl rescue
:レスキュー状態(シングルユーザー状態)で開始します。
2.systemd-analyze (起動時間の確認)
systemd-analyze
:起動時間を確認してください。systemd-analyze blame
:各サービスの起動時間を確認します。systemd-analyze critical-chain
:ウォーターフォール状の起動処理フローを表示します。systemd-analyze critical-chain 单元.service
:指定したサービスの起動フローを表示します。systemd-analyze plot > startup.svg
: アプリケーションとサービスの起動時間のフレームグラフ。のように:
3. hostnamectl (現在のホスト情報の表示/設定)
hostnamectl
:現在のホスト情報を表示します。hostnamectl set-hostname 主机名
:ホスト名を設定します。
4. localectl (ローカリゼーション設定の表示/設定)
localectl
: ローカリゼーション設定を表示します。localectl set-locale LANG=en_GB.utf8
localectl set-keymap en_GB
ローカリゼーションパラメータを設定します。
5. timedatectl (現在のタイムゾーン設定の表示/設定)
timedatectl
: 現在のタイムゾーン設定を表示します。timedatectl list-timezones
: 利用可能なすべてのタイムゾーンを表示します。timedatectl set-timezone America/New_York
timedatectl set-time YYYY-MM-DD
timedatectl set-time HH:MM:SS
timedatectl set-ntp 开关[true, false]
:ntp(ネットワーク時刻同期)をオン/オフします。
(1) 時刻同期サービスの停止
timedatectl set-ntp false
systemctl stop systemd-timesyncd
systemctl disable systemd-timesyncd
(2) システムのタイムゾーンを永続的に変更する
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
6.loginctl (現在ログインしているユーザーを表示するために使用)
loginctl list-sessions
: 現在のセッションを一覧表示します。loginctl list-users
:現在ログインしているユーザーを一覧表示します。loginctl show-user root
:指定したユーザーの情報を一覧表示します。
3. 単位
1. 分類
systemd
すべてのシステム リソースを管理できます。さまざまなリソースを総称してユニットと呼びます。ユニットは12種類に分かれています。
- サービスユニット: システムサービス。
- 対象ユニット:複数のユニットから構成されるグループ。
- デバイスユニット:ハードウェアデバイス。
- マウント ユニット: ファイル システムのマウント ポイント。
- Automount Unit : 自動マウント ポイント。
- パス単位: ファイルまたはパス。
- スコープ ユニット: systemd によって開始されていない外部プロセス。
- スライスユニット: プロセスグループ。
- スナップショット ユニット: systemd スナップショット。特定のスナップショットに切り替えることができます。
- ソケットユニット: プロセス間通信用のソケットです。
- スワップユニット: ファイルをスワップします。
- タイマー単位:タイマー。
注文
systemctl list-units
: 現在のシステム内のすべてのユニットを表示します。systemctl list-units --all
: 構成ファイルが見つからないユニットや起動に失敗したユニットを含む、すべてのユニットをリストします。systemctl list-units --all --state=inactive
: 実行されていないすべてのユニットをリストします。systemctl list-units --failed
: ロードに失敗したすべてのユニットをリストします。systemctl list-units --type=service
: サービス タイプの実行中のユニットをすべてリストします。
2. ステータス
systemctl status
:システムの状態を表示します。sysystemctl status 单元.service
:単体のユニットの状態を表示します。systemctl -H [email protected] status 单元.service
:リモートホスト上のユニットの状態を表示します。systemctl is-active 单元.service
:ユニットが動作しているかどうかを示します。systemctl is-failed 单元.service
:ユニットが起動失敗状態かどうかを表示します。systemctl is-enabled 单元.service
:ユニットの起動リンクが確立されているかどうかを表示します。
3. 管理
systemctl start 单元.service
: サービスをすぐに開始します。systemctl stop 单元.service
: サービスを直ちに停止します。systemctl restart 单元.service
: サービスを再起動します。systemctl kill 单元.service
: サービスのすべての子プロセスを強制終了します。systemctl reload 单元.service
: サービスの構成ファイルを再ロードします。systemctl show 单元.service
: ユニットの基礎となるパラメータをすべて表示します。systemctl daemon-reload
: 変更されたすべての構成ファイルを再ロードします。systemctl show -p CPUShares 单元.service
:ユニットの指定した属性の値を表示します。systemctl set-property httpd.service CPUShares=500
:ユニットの指定した属性を設定します。
4. 依存関係
ユニット間には依存関係があります。A は B に依存しています。つまり、systemd
A が開始されると、B も同時に開始されます。
systemctl list-dependencies 单元.service
: ユニットのすべての依存関係をリストします。
上記コマンドの出力結果のうち、一部の依存関係はTarget型(詳細は下記参照)のものであり、デフォルトでは展開表示されません。ターゲットを展開したい場合は、--all
パラメータを使用する必要があります。
systemctl list-dependencies --all 单元.service
4. ユニット構成ファイル
1。概要
systemd
各ユニットには、ユニットの起動方法を 示す構成ファイルがあります。systemd
デフォルトでは、/etc/systemd/system/
設定ファイルはディレクトリから読み取られますが、そこに保存されているファイルのほとんどは、ディレクトリ/usr/lib/systemd/system/
(実際の設定ファイルが保存されている場所) を指すシンボリック リンクです。systemctl enable
このコマンドは、上記の 2 つのディレクトリ間にシンボリック リンク関係を確立するために使用されます。
systemctl enable test.service
等同于
ln -s '/usr/lib/systemd/system/test.service' '/etc/systemd/system/multi-user.target.wants/test.service'
構成ファイルでスタートアップが設定されている場合、systemctl enable
このコマンドはスタートアップをアクティブ化することと同じです。対応するsystemctl disable
コマンドは、2 つのディレクトリ間のシンボリック リンク関係を解除するために使用されます。これは、起動をキャンセルするのと同じです。
systemctl disable test.service
構成ファイルのサフィックス名はユニットのタイプです (例: ) sshd.socket
。省略した場合、systemd
デフォルトの接尾辞は である.service
ため、sshd
として理解されますsshd.service
。
2. ステータス
systemctl list-unit-files
: すべての構成ファイルをリストします。systemctl list-unit-files --type=service
: 指定されたタイプの構成ファイルをリストします。systemctl list-unit-files
: 各設定ファイルの状態を表示するリストを出力し、合計4種類あります。- Enabled : 起動リンクが確立されています。
- 無効: 起動リンクは確立されません。
- static : この設定ファイルには [Install] 部分がなく (実行できません)、他の設定ファイルへの依存関係としてのみ使用できます。
- マスク済み: この設定ファイルは起動リンクの確立を禁止されています。
構成ファイルを変更したら、構成ファイルをsystemd
再ロードして再起動する必要があります。そうしないと、変更が有効になりません。
systemctl daemon-reload
systemctl restart 单元.service
3. フォーマット
設定ファイルは、テキスト エディタで開くことができる通常のテキスト ファイルです。systemctl cat 单元.service
構成ファイルの内容を表示するコマンド。例えば:
root@jaron:/home# systemctl cat sshd
# /lib/systemd/system/ssh.service
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
[Install]
WantedBy=multi-user.target
Alias=sshd.service
root@jaron:/#
上記の出力からわかるように、構成ファイルはいくつかのチャンクに分割されています。各ブロックの最初の行は、角括弧で囲まれた識別名です (例: ) [Unit]
。各ブロック内には、等号で接続されたいくつかのキーと値のペアがあります。注:構成ファイルのブロック名とフィールド名では大文字と小文字が区別され、キーと値のペアの等号の両側にスペースを含めることはできません。
3.ブロック
(1)【単位】
[Unit]
このブロックは通常、構成ファイルの最初のブロックであり、ユニットのメタデータと、構成と他のユニットの間の関係を定義するために使用されます。その主な分野は次のとおりです。
Description
: 簡単な説明。Documentation
:ドキュメントのアドレス。DefaultDependencies
: デフォルトの依存関係をオフにするかどうか。値は [yes
,no
]、デフォルトは ですyes
。注: After フィールドが次のように指定されている場合graphical.target
(インターフェイス システムの起動後に開始することを意味します)、このフィールドをno
有効に設定する必要があります。Requires
: 現在のユニットが依存する他のユニットが実行されていない場合、現在のユニットは起動できません。Wants
: 現在のユニットと連携する他のユニットが起動していない場合でも、現在のユニットは起動できません。BindsTo
: Requires と同様に、指定された Unit が終了すると、現在の Unit の実行が停止します。Before
: このフィールドで指定したユニットも起動したい場合は、現在のユニットの後に起動する必要があります。After
: このフィールドで指定したユニットも起動する必要がある場合は、現在のユニットよりも前に起動する必要があります。Conflicts
:ここで指定したユニットは、現在のユニットと同時に実行できません。Condition...
: 現在のユニットを実行するために満たさなければならない条件。そうでない場合、ユニットは実行されません。Assert...
: 現在のユニットを実行するには満たさなければならない条件。満たさない場合は起動エラーが報告されます。
(2)【サービス】
[Service]
このブロックはサービス構成に使用され、サービスタイプのユニットのみがこのブロックを持ちます。その主な分野は次のとおりです。
Type
: 起動時のプロセスの動作を定義します。以下の値を持ちます。Type=simple
:デフォルト値、ExecStart
指定されたコマンドを実行し、メインプロセスを開始します。Type=forking
:fork
この方法で親プロセスから子プロセスを作成すると、親プロセスは作成後すぐに終了します。Type=oneshot
systemd
:現在のサービスが終了するまで待機してから実行を続行する1 回限りのプロセス。Type=dbus
: 現在のサービスはD-Bus
によって開始されます。Type=notify
: 現在のサービスが開始されると、通知されsystemd
て実行を継続します。Type=idle
: 現在のサービスは、他のタスクが完了している場合にのみ実行されます。
KillMode
:systemd
サービスの停止方法を定義します 設定可能な値は以下の通りです。control-group
: (デフォルト値) 現在の制御グループ内のすべての子プロセスが強制終了されます。process
: メインプロセスのみを強制終了します。mixed
: メインプロセスがSIGTERM
シグナルを受信し、子プロセスがSIGKILL
シグナルを受信します。none
: プロセスは強制終了されません。
ExecStart
: 現在のサービスを開始するコマンド。ExecStartPre
: 現在のサービスを開始する前に実行されたコマンド。ExecStartPost
: 現在のサービスの開始後に実行されるコマンド。ExecReload
: 現在のサービスを再起動するときに実行されるコマンド。ExecStop
: 現在のサービスを停止するときに実行されるコマンド。ExecStopPost
: 現在のサービスを停止した後に実行するコマンド。RestartSec
: 現在のサービスを自動的に再起動する間隔の秒数。Restart
:systemd
現在のサービスがどのような状況で自動的に再起動されるかを定義します。指定可能な値にはalways
、(常に再起動)on-success
、、、、、、が含まれます。on-failure
on-abnormal
on-abort
on-watchdog
TimeoutSec
:systemd
現在のサービスを停止するまで待機する秒数を定義します。Environment
:環境変数を指定します。
(3)[インストール]
[Install]
通常、これは構成ファイルの最後のブロックであり、起動方法と起動時に起動するかどうかを定義するために使用されます。その主な分野は次のとおりです。
WantedBy
: その値は 1 つ以上のターゲットであり、現在のユニットがアクティブ化 (有効化) されると、シンボリック リンクはディレクトリ/etc/systemd/system
の下にある名前のサブディレクトリに配置されます。Target名.wants
RequiredBy
: その値は 1 つ以上のターゲットです。現在のユニットがアクティブ化されると、シンボリック リンクはディレクトリ/etc/systemd/system
の下にある名前のサブディレクトリに配置されます。Target名.required
Alias
: 現在のユニットを使用して起動できるエイリアス。Also
: 現在のユニットが起動(有効化)されると、他のユニットも同時に起動されます。
5. ターゲット
コンピュータを起動する場合、多数のユニットを起動する必要があります。起動するたびに、その起動に必要なユニットを指定しなければならないとしたら、明らかに非常に不便です。systemd
解決策はTargetです。
簡単に言うと、ターゲットは、関連する多くのユニットを含むユニット グループです。ターゲットが開始されると、systemd はその中のすべてのユニットを開始します。この意味で、ターゲットの概念は「状態ポイント」に似ており、ターゲットの開始は、特定の状態を開始することに似ています。
従来の起動モードには、 Targetとよく似たRunLevelの概念がinit
あります。違いは、RunLevel は相互排他的であり、複数のRunLevel を同時に開始することはできませんが、複数のTarget を同時に開始できることです。
systemctl list-unit-files --type=target
: 現在のシステム内のすべてのターゲットを表示します。systemctl list-dependencies multi-user.target
: ターゲットに含まれるすべてのユニットを表示します。systemctl get-default
: 起動時にデフォルトのターゲットを表示します。systemctl set-default multi-user.target
: 起動時のデフォルトのターゲットを設定します。systemctl isolate multi-user.target
: 次のターゲットに属さない前のターゲット内のプロセスをすべて閉じます。
Targetと従来のRunLevelの対応関係は次のとおりです。
従来のランレベル | 新しいターゲット名 シンボリックにリンクされています… |
---|---|
ランレベル0 | runlevel0.target -> poweroff.target |
ランレベル 1 | ランレベル1.ターゲット -> レスキュー.ターゲット |
ランレベル 2 | runlevel2.target -> multi-user.target |
ランレベル 3 | runlevel3.target -> multi-user.target |
ランレベル 4 | runlevel4.target -> multi-user.target |
ランレベル 5 | runlevel5.target -> グラフィカル.ターゲット |
ランレベル 6 | runlevel6.target -> reboot.target |
プロセスとの主な違いはinit 次のとおりです。 |
- デフォルトのRunLevel (ファイル設定内) は、
/etc/inittab
デフォルトのTargetに置き換えられました。これは通常、(グラフィカル インターフェイス) または(マルチユーザー コマンド ライン)/etc/systemd/system/default.target
へのシンボリック リンクです。graphical.target
multi-user.target
- 起動スクリプトの場所は
/etc/init.d
、以前は別のRunLevelディレクトリ ( / などetc/rc3.d
)へのシンボリック リンクを持つディレクトリでしたが、現在はそのディレクトリ/etc/rc5.d
に保存されています。/lib/systemd/system和/etc/systemd/system
- 設定ファイルの場所前処理
init
の設定ファイルは で、そのディレクトリ/etc/inittab
内に各種サービスの設定ファイルが格納されています。/etc/sysconfig
現在の構成ファイルは主に/lib/systemd
ディレクトリに保存されており、/etc/systemd
ディレクトリ内で変更を行うと元の設定が上書きされる可能性があります。
6. ログ管理
systemd
全ユニットの起動ログを一元管理。利点は、journalctl
1 つのコマンドだけですべてのログ (カーネル ログとアプリケーション ログ) を表示できることです。ログ構成ファイルは です/etc/systemd/journald.conf
。
journalctl
: すべてのログを表示します (デフォルトでは、この起動のログのみが保存されます)。journalctl -k
: カーネル ログを表示します (アプリケーション ログは表示しません)。journalctl -b -0
: このシステムの起動ログを表示します。journalctl -b -1
: システムの前回の起動ログを表示します。journalctl --since="2012-10-30 18:17:16"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2015-01-10" --until "2015-01-11 03:00"
journalctl --since 09:00 --until "1 hour ago"
指定した期間のログを表示します。journalctl -n
:最新10行分のログを最後に表示します。journalctl -n 行数
:指定した行数のログを末尾に表示します。journalctl -f
:最新ログをリアルタイムにスクロール表示します。journalctl _PID=1
: 指定したプロセスのログを表示します。journalctl /usr/bin/bash
: 特定のパスにあるスクリプトのログを表示します。journalctl _UID=33 --since today
: 指定したユーザーのログを表示します。journalctl -u 单元.service
journalctl -u 单元.service --since today
ユニットのログを表示します。journalctl -u 单元.service -f
:ユニットの最新ログをリアルタイムにスクロールして表示します。journalctl -u 单元1.service -u 单元2.service --since today
:複数のユニットのログを結合して表示します。journalctl -p err -b
: 指定された優先度 (およびそれ以上) のログを表示します。合計 8 つのレベルがあります。- 0: 出現
- 1: 警告
- 2: クリティカル
- 3: エラー
- 4: 警告
- 5:注意
- 6: 情報
- 7: デバッグ
journalctl --no-pager
: デフォルトのログ出力はページングされ、--no-pager
通常の標準出力に変更されます。journalctl -b -u 单元.service -o json
:JSON形式(一行)で出力します。journalctl -b -u 单元.serviceqq -o json-pretty
: 読みやすくするために JSON 形式 (複数行) で出力します。journalctl --disk-usage
: ログが占有しているハードディスク容量を表示します。journalctl --vacuum-size=1G
: ログファイルが占める最大容量を指定します。journalctl --vacuum-time=1years
: ログ ファイルを保存する期間を指定します。