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.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 セッションが切れる可能性あり。ユニットファイルを編集(もしくは新規作成)したら 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-pager
systemctl --failed
sudo systemctl mask --now some.service
本記事は systemctl
の主要機能とオプションを網羅的にまとめたものです。実際の環境やディストリビューション(Debian系 / RHEL系 / Arch など)によりパスや一部挙動が異なることがあります。特定ディストリ向けの例が必要なら、その旨を教えてください。