Linux systemctl コマンド 完全ガイド

systemctl は systemd のコントロールインターフェースで、サービス(サービスユニット)、ソケット、マウントポイント、タイマー、ターゲット(旧 runlevel)などの「ユニット」を管理します。サービスの起動・停止・有効化(起動時自動実行)・状態確認・設定変更などを行います。

基本構文と使い方

systemctl [OPTIONS...] COMMAND [NAME...]
  • COMMANDstart, stop, restart, status などの操作
  • NAMEnginx.service, sshd.service, multi-user.target などのユニット名

例:

# nginx サービスの起動
sudo systemctl start nginx

# ssh サービスの状態確認
systemctl status sshd

# ブート時に httpd を有効化
sudo systemctl enable httpd

よく使うサブコマンド(機能別)

以下は実務で頻出するコマンドと説明。

  • start <unit>: 指定ユニットを起動(即時)。
  • stop <unit>: 指定ユニットを停止。
  • restart <unit>: 停止→起動。設定反映に便利。
  • reload <unit>: 設定ファイルのリロード(ユニットが対応する場合)。
  • try-restart <unit>: 稼働中なら再起動。
  • status <unit>: ユニットの現在状態、ログの一部を表示。
  • is-active <unit>: アクティブ(実行中)なら 0 を返す。
  • is-enabled <unit>: 起動時有効かどうかを確認。
  • enable <unit>: 起動時に有効化(シンボリックリンク作成)。
  • disable <unit>: 起動時無効化(リンクを削除)。
  • mask <unit>: 完全に起動禁止(/dev/null へのリンク)。
  • unmask <unit>: mask を解除。
  • daemon-reload: ユニットファイルの変更を systemd に読み込み直させる。
  • list-units: 現在有効・読み込まれているユニットを一覧表示。
  • list-unit-files: インストールされているユニットファイルと enable/disable 状態を表示。
  • show <unit>: ユニットのプロパティを詳細表示(--> で絞れる)。
  • cat <unit>: ユニットファイルの定義を出力(/etc/systemd にある override も含む)。
  • edit <unit>: ユーザーエディタで override(/etc/systemd/system/.../override.conf)を作成/編集。
  • preset <unit>: ディストリビューションのプリセットに従い enable/disable を適用。
  • is-failed <unit>: ユニットが失敗状態か確認。
  • reset-failed: 失敗フラグのクリア。

有用なオプション一覧

systemctl はグローバルオプションとサブコマンド固有オプションがあります。ここでは頻出のものを列挙します。

グローバルオプション

  • --system: システムデーモンのコントロール(デフォルト)。
  • --user : ユーザーユニットを操作(systemd --user)。
  • --no-block : 操作を非同期化してコマンドをブロックしない(戻り値は起動リクエストの送信結果)。
  • --no-ask-password : パスワード問い合わせを行わない。
  • --no-pager : 出力を pager に流さない(less 等)。
  • --full / --lines= : status のログ表示で行数制御。
  • --plain : フォーマットを最小化(機械処理向け)。

サブコマンドでよく使うオプション

  • --now(例:systemctl enable --now <unit>): enable/disable 実行時に即時 start/stop を行う。
  • --force(例:systemctl enable --force): 強制的に操作(注意して使用)。
  • --type=(例:systemctl --type=service list-units): 表示対象のユニット種別を指定(service, socket, target, mount, timer など)。
  • --state=(例:list-units --state=failed): 指定状態のユニットのみ表示。
  • -->(例:systemctl show -->): show 出力を絞る。

ユニット(unit)とユニットファイルの種類

ユニットは systemd が管理する対象の総称。主な種類:

  • .service — デーモン/サービス
  • .socket — ソケットアクティベーション
  • .target — 複数ユニットのグループ(旧 runlevel の概念)
  • .mount — マウントポイント
  • .automount — 自動マウント
  • .timer — cron の代替(定期実行)
  • .path — ファイル/ディレクトリの変更でトリガー
  • .slice / .scope — cgroup 管理用

ユニットファイルの検索パス(典型例):

  • /etc/systemd/system/ — 管理者が配置・override するための場所
  • /run/systemd/system/ — ランタイム生成ユニット
  • /lib/systemd/system/ または /usr/lib/systemd/system/ — パッケージが提供するユニット

実践例(よくある操作パターン)

サービスの起動・自動起動設定

# 起動
sudo systemctl start nginx.service

# ブート時に自動起動
sudo systemctl enable nginx.service

# 即時起動と同時に有効化
sudo systemctl enable --now nginx.service

サービスの停止・無効化

sudo systemctl stop nginx.service
sudo systemctl disable nginx.service
sudo systemctl disable --now nginx.service # 即時停止して無効化

再起動とリロード

# 設定を反映させる(可能なら reload)
sudo systemctl reload nginx.service || sudo systemctl restart nginx.service

マスクして完全に起動不可にする

sudo systemctl mask nginx.service # 起動を完全にブロック
sudo systemctl unmask nginx.service # マスク解除

ユニットの状態確認とログ確認

systemctl status nginx.service
# Journal の詳細ログを参照
journalctl -u nginx.service --since"2025-10-01"--no-pager

ユニットの編集・デバッグ・確認コマンド

  • systemctl edit <unit>: 管理者用の override ファイルを作成。/etc/systemd/system/<unit>.d/override.conf に変更が置かれるため、パッケージ提供のファイルを直接編集せずにカスタマイズ可能。
  • systemctl cat <unit>: 実際に読み込まれているユニット定義(オリジナルと override を統合して表示)。
  • systemctl show <unit>: 詳細なプロパティ(ExecStart, ExecStop, PID, MainPID, ActiveState, SubState 等)を取得。--> で絞り込み可。
  • systemctl list-dependencies <unit>: 依存関係(Requires, Wants, After, Before など)を可視化。
  • systemctl isolate <target>: 指定ターゲットに切り替え(例: multi-user.target, graphical.target)。注意: ログインや GUI セッションが切れる可能性あり。

systemd の再読み込みとデーモン管理

ユニットファイルを編集(もしくは新規作成)したら daemon-reload が必要。

sudo systemctl daemon-reload
sudo systemctl restart nginx.service

ユニットファイルのインストールやアンインストール後、プリセットの適用には systemctl preset を使うことがある。

トラブルシュート例

サービスが起動しない(Exit code / Failed)

  1. systemctl status <unit>Main PID, Active 状態、Status メッセージを確認。
  2. journalctl -u <unit> -b でブート後のログを確認。
  3. systemctl show -p ExecStart,ExecStop,ExecMainStatus <unit> で実行コマンド/終了ステータスを確認。
  4. ユニットファイルの Restart= ポリシーや RestartSec= を確認。
  5. 必要に応じて systemctl reset-failed <unit> で失敗フラグをクリアしてから再試行。

起動時に自動起動しない

  • systemctl is-enabled <unit> で状態を確認。
  • systemctl list-unit-files | grep <unit> でプリセット状態を確認。
  • systemctl enable --now <unit> で有効化と即時起動を同時に行う。

依存で止まる

  • systemctl list-dependencies --reverse <unit> で逆依存を確認。
  • 依存ユニットにエラーがあれば、そちらの statusjournalctl を確認。

セキュリティ・運用上の注意点

  • mask は強力。誤ってシステムに必要なユニットを mask すると復旧に手間がかかる。
  • enable --nowrestart の自動化はデプロイ時に計画的に行う。
  • systemctl edit での override はパッケージアップデートで上書きされないため推奨される手法。
  • ユーザー領域の --user systemd は GUI セッションやログインユーザー固有のジョブに使えるが、権限や cgroup の扱いに注意。

まとめと参考コマンド集(クイックリファレンス)

起動・停止・再起動

sudo systemctl start <unit>
sudo systemctl stop <unit>
sudo systemctl restart <unit>
sudo systemctl reload <unit> # 可能なら

有効化・無効化

sudo systemctl enable <unit>
sudo systemctl disable <unit>
sudo systemctl enable --now <unit> # 即時適用

状態確認

systemctl status <unit>
systemctl is-active <unit>
systemctl is-enabled <unit>
journalctl -u <unit>

管理・編集

sudo systemctl daemon-reload
systemctl cat <unit>
sudo systemctl edit <unit>
systemctl show <unit> -->

付録:便利なワンライナー例

  • 再起動回数を含むサービスのログ確認(過去1時間):
journalctl -u nginx.service --since"1 hour ago"--no-pager
  • 全ての失敗したユニットを一覧表示:
systemctl --failed
  • 指定サービスをマスクして即時停止:
sudo systemctl mask --now some.service

まとめ

本記事は systemctl の主要機能とオプションを網羅的にまとめたものです。実際の環境やディストリビューション(Debian系 / RHEL系 / Arch など)によりパスや一部挙動が異なることがあります。特定ディストリ向けの例が必要なら、その旨を教えてください。

にいやん

出身 : 関西 居住区 : 関西 職業 : 組み込み機器エンジニア (エンジニア歴13年) 年齢 : 38歳(2022年11月現在) 最近 業務の効率化で噂もありPython言語に興味を持ち勉強しています。 そこで学んだことを記事にして皆さんとシェアさせていただければと思いブログをはじめました!! 興味ある記事があれば皆さん見ていってください!! にほんブログ村