改めてLinuxのsystemdとsystemctlコマンドを整理してみた
systemdについて
1. はじめに
こんにちは!北国で細々とエンジニアをしているNakaeです。
昨日寝る前に、前々から腑に落ちていなかったLinuxのsystemdとsystemctlコマンドについて考え始めた結果、一睡もできずに今日を迎えてしまったので、
改めて調べてみたものをまとめようと思います(?)
「こんなもんとっくに知ってるわ!!!」となる方もいるかもしれませんがあしからず...
2. systemdとは?
Linuxカーネルが起動した後、システムを利用可能な状態にするまでの起動処理や、システム上で動作する様々なプログラムを管理する仕組みのこと。
この管理の最小単位を**ユニット(Unit)**といい、systemdは全ての機能をユニットとして統一的に扱う。
ユニットには拡張子によって、以下のように区別されている。
| 種類 | 拡張子 | 役割 |
|---|---|---|
| service | .service |
デーモンや1回限りのジョブを実行 |
| socket | .socket |
ソケット待受設定 |
| target | .target |
複数のユニットをまとめた状態 |
| timer | .timer |
定期実行のスケジューラ |
| mount | .mount |
ファイルシステムのマウント設定 |
| swap | .swap |
スワップ領域の管理 |
| device | .device |
デバイスノードの管理 |
| path | .path |
ファイル/ディレクトリの監視と起動トリガー |
systemdはこれらのユニット間の依存関係を解決し、正しい順序で起動・停止・監視を行うことで、システム全体の安定した動作を実現している。
3. systemctlについて
systemctlとはsystemdを操作するためのコマンドツールのこと。
4. systemctlでできること
systemctlでできることは、主に以下のカテゴリに分けられる。
- サービスの管理
- ターゲット(起動)モードの切替・設定
- ユニットの一覧・状態の確認
- システム全体の制御
- デバッグやトラブルシューティング
4.1. サービスの管理
サービスとは、バックグラウンドで常時動作するプログラム(デーモン)や、特定のタイミングで実行されるジョブのこと。
systemdではサービスもユニットの一種(.service)として管理する。
サービスの起動
systemctl start <サービス名>
サービスの停止
systemctl stop <サービス名>
サービスの再起動
systemctl restart <サービス名>
サービスの状態の確認
systemctl status <サービス名>
自動起動の有効化(OS起動時に起動)
systemctl enable <サービス名>
自動起動の無効化
systemctl disable <サービス名>
有効化されているかの確認
systemctl is-enabled <サービス名>
4.2. ターゲット(起動モード)の切替・設定
ターゲット(Target)とはsystemdにおけるユニットの一種で、複数のユニットをグループ化したもので、OSの「モード」や「動作状態」を表す。
PCの電源を入れた時、デフォルトターゲットとして指定しているモードでOSが起動する。
主なターゲットは以下の通りである。
| ターゲット | 役割 |
|---|---|
| basic.target | ほとんどのターゲットが依存する基礎的な状態。OS 起動プロセスの中間地点で、単独で使うことは少ない。 |
| multi-user.target | 複数ユーザーでのCLIログインが可能な状態 |
| graphical.target | GUI(X11, Wayland)ログイン画面が出る状態 |
| rescue.target | シングルユーザーモード(トラブルシュート用) |
| emergency.target | 最低限のシェルだけ起動(緊急修復用) |
| shutdown.target | シャットダウン状態 |
現在のデフォルトターゲットを確認
systemctl get-default
デフォルトターゲットを変更(再起動後も有効)
sudo systemctl set-default <ターゲット名>
一時的なターゲットの切り替え
sudo systemctl isolate <ターゲット名>
ターゲットの依存関係をツリー表示
systemctl list-dependencies <ターゲット名>
4.3. ユニットの一覧・状態の確認
systemdが管理しているユニット全体を調べることができる。
全てのユニット一覧表示
systemctl list-units
サービスだけ一覧表示
systemctl list-units --type=service
無効化されたものも含めて表示
systemctl list-units-files
4.4. システム(OS)全体の制御
再起動・シャットダウン・サスペンドもsystemctl経由で実行することができる。
再起動
sudo systemctl reboot
シャットダウン
sudo systemctl poweroff
サスペンド
sudo systemctl suspend
4.5. デバッグやトラブルシューティング
失敗したユニットの表示
systemctl --failed
特定サービスのログを確認(journalctlと併用)
journalctl -u <サービス名> -xe
5. 最後に
今回はsystemdについて調べてみたことをまとめてみました。systemctlコマンドで行える操作がサービスの起動やOSのモード選択・シャットダウン
など多岐に渡り、systemctlの実態が掴めていなかったのが腑に落ちていなかった原因だったと思います。これで今日は安眠できるぞぉ!
Discussion