はじめに
すぐにわすれる systemd 関連のメモ
最新に加筆修正しました。
↓
【2024年1月版】中年エンジニアのための systemd メモ 【systemctl, journalctl すぐ忘れてしまう人向け】
systemd
主なデーモンプロセス
systemd ではデーモンプロセスが連携して動作する
プロセス |
説明 |
systemd |
systemdのメインプロセス |
systemd-journal |
ジャーナル管理プロセス |
systemd-logind |
ログイン処理プロセス |
systemd-udevd |
デバイス動的検知プロセス |
主な Unit
systemd では、システムの起動処理は Unit と呼ばれる処理単位に分割される
Unitの拡張子 |
説明 |
service |
各種サービスの起動 |
device |
各種デバイス、udevのデバイス認識で自動作成 |
mount |
ファイルシステムのマウント、/etc/fstabから自動作成 |
swap |
スワップ領域、/etc/fstabから自動作成 |
target |
Unitのグループ |
socket |
ソケットの監視〜接続時にサービスの起動 |
timer |
サービスの起動の予約 |
ランレベルとターゲットの対応
ランレベル |
説明 |
0 |
シャットダウン |
1 |
シングルユーザモード |
2 |
ネットワーク無しのマルチユーザモード |
3 |
通常のマルチユーザモード(テキストログイン) |
4 |
未使用 |
5 |
グラフィカルログインによるマルチユーザモード |
6 |
再起動 |
ランレベル |
ターゲット |
0 |
poweroff.target |
1 |
rescue.target |
2, 3, 4 |
multi-user.target |
5 |
graphical.target |
6 |
reboot.target |
主な systemctl のサブコマンド
サブコマンド |
説明 |
start |
サービスを起動 |
stop |
サービスを停止 |
restart |
サービスを再起動 |
reload |
サービスの設定を再読み込み |
status |
サービスの稼働状況の表示 |
is-active |
サービスが起動しているかどうか確認 |
enable |
システム起動時にサービスを起動するように設定 |
disable |
システム起動時にサービスを起動しないように設定 |
is-enabled |
システム起動時にサービスが起動されるかどうか確認、aliasの場合もある |
mask |
Unitを起動できないように指定 |
unmask |
Unitのmaskを解除 |
kill |
Unitへシグナルを送る |
daemon-reload |
設定を再読み込み |
cat |
Unitファイルの内容表示 |
list-units |
起動しているUnitの表示 |
list-unit-files |
すべてのUnitの表示 |
list-dependencies |
Unitの依存関係の表示 |
reboot |
システムの再起動 |
poweroff |
システムの停止 |
rescue |
シングルユーザモード |
emergency |
緊急モード |
主なサブコマンドのオプション
オプション |
説明 |
-t, --type= |
種類を指定 |
--state= |
状態を指定 |
-l, --full |
省略せずに表示 |
-a, --all |
Unitすべてを表示 |
-s, --signal= |
シグナルの指定 |
--no-pager |
ページャ無しの表示 |
Unit 設定ファイル
主なセクション
セクション名 |
説明 |
Unit |
ユニットの説明、ドキュメンテーションへのリンク、他のユニットに対する依存関係を定義 |
Service |
サービスユニットに特有で、実行するプロセスの動作を定義 |
Socket |
ソケットユニットで使用され、ソケットの設定を定義 |
Install |
ユニットがどのように "enabled" (有効化) や "disabled" (無効化) されるかを定義 |
Timer |
タイマーユニットで使用され、定期的にまたは特定の時間にユニットを起動するためのタイマーを定義 |
Mount |
マウントユニットで使用され、特定のファイルシステムのマウントポイントを定義 |
Path |
パスユニットで使用され、特定のファイルやディレクトリの存在や変更を監視し、それに応じたユニットを定義 |
Network |
ネットワークユニットで使用され、ネットワーク接続を定義 |
Automount |
自動マウントユニットで使用され、アクセス時に自動マウントを定義 |
主なパラメータ
セクション |
パラメータ |
説明 |
Unit |
Description |
ユニットの概要を提供するフリーテキストフィールド |
|
Documentation |
ユニットに関するドキュメンテーションのURLを指定 |
|
After , Before
|
他のユニットに対する順序依存性を指定 |
Service |
ExecStart |
サービスを開始するためのコマンド |
|
ExecStop |
サービスを停止するためのコマンド |
|
Restart |
サービスが失敗したときの再起動ポリシー |
Socket |
ListenStream , ListenDatagram
|
ソケットが待ち受けるアドレスとポート |
|
Accept |
サービスが接続ごとに新しいプロセスを生成するかどうか |
Install |
WantedBy |
ユニットがインストールされたときに起動するターゲット |
|
Alias |
ユニットの別名 |
Timer |
OnBootSec |
システム起動後にタイマーが起動するまでの時間 |
|
OnUnitActiveSec |
指定したユニットが最後にアクティブになってからタイマーが起動するまでの時間 |
Mount |
What |
マウントするリソースのパス |
|
Where |
マウントポイントのパス |
|
Type |
ファイルシステムの種類 |
Path |
PathExists |
指定したパスが存在する場合にユニットを起動 |
|
PathChanged |
指定したパスが変更された場合にユニットを起動 |
Network |
DHCP |
DHCPを使用するかどうか |
|
Address |
静的IPアドレスの設定 |
Automount |
Where |
マウントポイントのパス |
|
TimeoutIdleSec |
アクセスがない場合の自動アンマウントまでの時間 |
systemd-delta コマンド
systemd-delta [-t オプション] [ディレクトリ]
オプション |
説明 |
-t , --type=
|
差分の種類を指定。可能な値は extended , masked , equivalent , redirected , overridden
|
--no-pager |
出力のページングを無効 |
--no-legend |
凡例を非表示 |
--system |
システムユニットの差分を表示 |
--user |
ユーザユニットの差分を表示 |
--runtime |
ランタイム設定の差分を表示 |
--global |
グローバル設定の差分を表示 |
journalctl
主なオプション
オプション |
説明 |
-b , --boot
|
現在のブートまたは特定のブートのジャーナルメッセージを表示 |
-f , --follow
|
ログがリアルタイムで更新されると、その更新を表示 |
-u , --unit=, _SYSTEMD_UNIT
|
特定のシステムユニットのジャーナルメッセージを表示 |
-k , --dmesg
|
カーネルメッセージのみを表示 |
-p , --priority=
|
指定された優先度またはそれより重要なメッセージを表示 |
_PID= |
指定されたPIDのメッセージを表示 |
_UID= |
指定されたUIDのメッセージを表示 |
-r , --reverse
|
ジャーナルエントリを最新から最初へと逆順に表示 |
-S , --since=
|
指定した日時以降のジャーナルメッセージを表示 |
-U , --until=
|
指定した日時までのジャーナルメッセージを表示 |
--no-pager |
ページングを無効にし、すべてのログを一度に表示 |
--no-hostname |
ログエントリからホスト名を除外 |
-x , --catalog
|
可能な場合、メッセージカタログから追加情報を取得して表示 |
-o , --output=
|
指定されたフォーマットでジャーナルメッセージを表示 |
-n , --lines=
|
末尾から指定された行数を表示、デフォルトは10行 |
-e , --pager-end
|
末尾から1000行をページャーで表示 |
よくつかうパターン
から
$ journalctl --since="2023-08-12 22:15:00"
まで
$ journalctl --until="2023-08-13 22:15:00"
日付範囲
$ journalctl --since="2023-08-13 22:15:00" --until="2023-08-14 23:15:00"
現在日付からの差分を指定
$ journalctl --since="$(date -d '12 hour ago' '+%Y-%m-%d %H:%M:%S')" --until="$(date -d '11 hour ago' '+%Y-%m-%d %H:%M:%S')"
降順
最新のログをフォロー表示
今回起動してから
前回起動してから
前前回起動してから
今回起動してから、エラーのみ
カーネルログのみ
ページャーを使用しない
エラーログのみ、今回起動してから、追加情報込みで
カレントでないjournalログフォルダから読み込んで使う、フォルダごといける
$ journalctl -D /var/log/journal/xxxxxxxxx
古いログファイルから読み込んで使う
$ journalctl --file=/var/log/journal/old.log
さいごに
わすれたくない
関連資料
LinuC レベル2 Version 10.0 201試験 出題範囲
LinuC レベル2 Version 10.0 202試験 出題範囲
Linux教科書 LinuCレベル2 Version 10.0対応