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 はパッケージアップデートで上書きされないため推奨される手法。- ユーザー領域の
--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> --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 など)によりパスや一部挙動が異なることがあります。特定ディストリ向けの例が必要なら、その旨を教えてください。
コメント