systemctl は systemd のコントロールインターフェースで、サービス(サービスユニット)、ソケット、マウントポイント、タイマー、ターゲット(旧 runlevel)などの「ユニット」を管理します。サービスの起動・停止・有効化(起動時自動実行)・状態確認・設定変更などを行います。
基本構文と使い方
systemctl [OPTIONS...] COMMAND [NAME...]COMMANDはstart,stop,restart,statusなどの操作NAMEはnginx.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>: ユニットのプロパティを詳細表示(--property=で絞れる)。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): 指定状態のユニットのみ表示。--property=(例:systemctl show --property=ExecStart nginx.service):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 等)を取得。--property=で絞り込み可。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)
systemctl status <unit>でMain PID,Active状態、Statusメッセージを確認。journalctl -u <unit> -bでブート後のログを確認。systemctl show -p ExecStart,ExecStop,ExecMainStatus <unit>で実行コマンド/終了ステータスを確認。- ユニットファイルの
Restart=ポリシーやRestartSec=を確認。 - 必要に応じて
systemctl reset-failed <unit>で失敗フラグをクリアしてから再試行。
起動時に自動起動しない
systemctl is-enabled <unit>で状態を確認。systemctl list-unit-files | grep <unit>でプリセット状態を確認。systemctl enable --now <unit>で有効化と即時起動を同時に行う。
依存で止まる
systemctl list-dependencies --reverse <unit>で逆依存を確認。- 依存ユニットにエラーがあれば、そちらの
statusとjournalctlを確認。
セキュリティ・運用上の注意点
maskは強力。誤ってシステムに必要なユニットを mask すると復旧に手間がかかる。enable --nowやrestartの自動化はデプロイ時に計画的に行う。systemctl editでの override はパッケージアップデートで上書きされないため推奨される手法。- ユーザー領域の
--usersystemd は 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> --property=ExecStart付録:便利なワンライナー例
- 再起動回数を含むサービスのログ確認(過去1時間):
journalctl -u nginx.service --since"1 hour ago"--no-pager- 全ての失敗したユニットを一覧表示:
systemctl --failed- 指定サービスをマスクして即時停止:
sudo systemctl mask --now some.serviceまとめ
本記事は systemctl の主要機能とオプションを網羅的にまとめたものです。実際の環境やディストリビューション(Debian系 / RHEL系 / Arch など)によりパスや一部挙動が異なることがあります。特定ディストリ向けの例が必要なら、その旨を教えてください。





コメント