Linux systemctl コマンド
systemctl とは
systemctl は、Linux システムにおいて systemd システムおよびサービス管理を制御するためのコマンドラインツールです。現代の Linux ディストリビューションにおける中核コンポーネントとして、従来の init システムや service コマンドに取って代わりました。
systemd の概要
systemd はシステムおよびサービスマネージャーであり、以下の特徴があります:
- PID 1(最初に起動するプロセス)として動作します
- 他のすべてのプロセスの起動、停止、管理を担当します
- 並行起動機能を提供し、システムの起動速度を大幅に高速化します
- オンデマンドでのサービス起動をサポートします
- ログ収集機能を提供します(journald 経由)
systemctl 基本構文
systemctl [选项] [命令] [单元名称]
よく使うオプション
| オプション | 説明 |
|---|---|
| -t, --type | ユニットタイプを指定します(service、socket、device など) |
| -a, --all | 非アクティブなものを含むすべてのユニットを表示します |
| --state | 状態でユニットをフィルタリングします |
| -l, --full | 完全なユニット情報を表示します |
| -H, --host | リモートホストを操作します |
サービス管理コマンド
サービスの開始/停止/再起動
例
# サービスを開始
sudo systemctl start [サービス名]
# サービスを停止
sudo systemctl stop [サービス名]
# サービスを再起動
sudo systemctl restart [サービス名]
# 設定を再読み込み(サービスを再起動しない)
sudo systemctl reload [サービス名]
sudo systemctl start [サービス名]
# サービスを停止
sudo systemctl stop [サービス名]
# サービスを再起動
sudo systemctl restart [サービス名]
# 設定を再読み込み(サービスを再起動しない)
sudo systemctl reload [サービス名]
サービスの状態確認
例
# 単一のサービスの状態を確認
systemctl status [サービス名]
# 実行中のすべてのサービスを表示
systemctl list-units --type=service --state=running
# 失敗したサービスを表示
systemctl --failed
systemctl status [サービス名]
# 実行中のすべてのサービスを表示
systemctl list-units --type=service --state=running
# 失敗したサービスを表示
systemctl --failed
サービスの有効化/無効化
例
# サービスを有効化(起動時の自動開始)
sudo systemctl enable [サービス名]
# サービスを無効化(起動時の自動開始を解除)
sudo systemctl disable [サービス名]
# サービスが有効かどうかを確認
systemctl is-enabled [サービス名]
sudo systemctl enable [サービス名]
# サービスを無効化(起動時の自動開始を解除)
sudo systemctl disable [サービス名]
# サービスが有効かどうかを確認
systemctl is-enabled [サービス名]
ユニットファイル管理
ユニットファイルの場所
- システムユニット:
/usr/lib/systemd/system/ - 管理者カスタムユニット:
/etc/systemd/system/
よく使うユニットファイル操作
例
# すべてのユニットファイルを再読み込み(設定変更後に実行が必要)
sudo systemctl daemon-reload
# ユニットファイルの内容を表示
systemctl cat [ユニット名]
# ユニットファイルを編集(オーバーライドファイルが作成されます)
sudo systemctl edit [ユニット名] --full
sudo systemctl daemon-reload
# ユニットファイルの内容を表示
systemctl cat [ユニット名]
# ユニットファイルを編集(オーバーライドファイルが作成されます)
sudo systemctl edit [ユニット名] --full
システム状態管理
システム電源管理
例
# シャットダウン
sudo systemctl poweroff
# 再起動
sudo systemctl reboot
# サスペンド
sudo systemctl suspend
# ハイバネート
sudo systemctl hibernate
sudo systemctl poweroff
# 再起動
sudo systemctl reboot
# サスペンド
sudo systemctl suspend
# ハイバネート
sudo systemctl hibernate
システムのランレベル
例
# 現在のターゲット(ランレベル)を取得
systemctl get-default
# デフォルトターゲットを設定
sudo systemctl set-default [ターゲット名]
# ターゲットを切り替え(即座に反映)
sudo systemctl isolate [ターゲット名]
systemctl get-default
# デフォルトターゲットを設定
sudo systemctl set-default [ターゲット名]
# ターゲットを切り替え(即座に反映)
sudo systemctl isolate [ターゲット名]
一般的なターゲット:
- graphical.target - グラフィカルインターフェースモード
- multi-user.target - マルチユーザーテキストモード
- rescue.target - レスキューモード
- emergency.target - 緊急モード
実践例
例1:Nginx サービスの管理
例
# Nginx を起動
sudo systemctl start nginx
# 起動時の自動開始を設定
sudo systemctl enable nginx
# 状態を確認
systemctl status nginx
# 設定をテストして再読み込み
sudo nginx -t # まず設定をテスト
sudo systemctl reload nginx
sudo systemctl start nginx
# 起動時の自動開始を設定
sudo systemctl enable nginx
# 状態を確認
systemctl status nginx
# 設定をテストして再読み込み
sudo nginx -t # まず設定をテスト
sudo systemctl reload nginx
例2:カスタムサービスの作成
- サービスファイルの作成
/etc/systemd/system/myapp.service:
例
[Unit]
Description=My Custom Application
After=network.target
[Service]
ExecStart=/usr/bin/python3 /opt/myapp/app.py
WorkingDirectory=/opt/myapp
User=myappuser
Group=myappgroup
Restart=always
[Install]
WantedBy=multi-user.target
Description=My Custom Application
After=network.target
[Service]
ExecStart=/usr/bin/python3 /opt/myapp/app.py
WorkingDirectory=/opt/myapp
User=myappuser
Group=myappgroup
Restart=always
[Install]
WantedBy=multi-user.target
- サービスを有効化して起動:
例
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl enable myapp
sudo systemctl start myapp
よくある問題のトラブルシューティング
サービスの起動失敗
詳細なログを確認:
journalctl -u [服务名] -xe
依存関係を確認:
systemctl list-dependencies [服务名]
デバッグモードで実行:
systemctl status [服务名] -l --no-pager
パフォーマンス分析
例
# システムの起動にかかった時間を表示
systemd-analyze
# 各サービスの起動時間を表示
systemd-analyze blame
# 起動プロセス図を生成(GUI が必要)
systemd-analyze plot > boot.svg
systemd-analyze
# 各サービスの起動時間を表示
systemd-analyze blame
# 起動プロセス図を生成(GUI が必要)
systemd-analyze plot > boot.svg