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>: ユニットのプロパティを詳細表示(--> で絞れる)。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 出力を絞る。ユニットは 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.servicesudo 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.servicesudo systemctl mask nginx.service # 起動を完全にブロック
sudo systemctl unmask nginx.service # マスク解除systemctl status nginx.service
# Journal の詳細ログを参照
journalctl -u nginx.service --since"2025-10-01"--no-pagersystemctl 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 セッションが切れる可能性あり。ユニットファイルを編集(もしくは新規作成)したら daemon-reload が必要。
sudo systemctl daemon-reload
sudo systemctl restart nginx.serviceユニットファイルのインストールやアンインストール後、プリセットの適用には systemctl preset を使うことがある。
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 はパッケージアップデートで上書きされないため推奨される手法。--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> -->journalctl -u nginx.service --since"1 hour ago"--no-pagersystemctl --failedsudo systemctl mask --now some.service本記事は systemctl の主要機能とオプションを網羅的にまとめたものです。実際の環境やディストリビューション(Debian系 / RHEL系 / Arch など)によりパスや一部挙動が異なることがあります。特定ディストリ向けの例が必要なら、その旨を教えてください。