💾

改めて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でできることは、主に以下のカテゴリに分けられる。

  1. サービスの管理
  2. ターゲット(起動)モードの切替・設定
  3. ユニットの一覧・状態の確認
  4. システム全体の制御
  5. デバッグやトラブルシューティング

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