systemctl / service
| 対応: | systemctl | 全Linux |
|---|---|---|
| service | 全Linux |
systemctl は systemd を介してサービス(デーモン)を管理するコマンドです。起動・停止・再起動・自動起動の設定など、サービスのライフサイクル全体を操作できます。従来の『service』コマンド(SysVinit)と互換性のある形でも使えます。systemd 環境では『systemctl』が使われます。
構文
サービスの基本操作は以下の形式で実行します。『UNIT』はサービス名(例: 『nginx』、『sshd』)です。
systemctl start UNIT systemctl stop UNIT systemctl restart UNIT systemctl reload UNIT systemctl status UNIT systemctl enable UNIT systemctl disable UNIT
ユニット一覧の表示には以下を使います。
systemctl list-units [--type=service] systemctl list-unit-files [--type=service]
ユニットファイルを変更したあとは再読み込みが必要です。
systemctl daemon-reload
コマンド一覧
| コマンド | 概要 |
|---|---|
| systemctl start UNIT | サービスを今すぐ起動します。 |
| systemctl stop UNIT | サービスを今すぐ停止します。 |
| systemctl restart UNIT | サービスを停止してから再起動します。 |
| systemctl reload UNIT | プロセスを再起動せずに設定ファイルを再読み込みします(対応サービスのみ)。 |
| systemctl status UNIT | サービスの状態・PID・最近のログを表示します。 |
| systemctl enable UNIT | OS 起動時にサービスを自動起動するよう設定します(今すぐ起動はしません)。 |
| systemctl disable UNIT | OS 起動時の自動起動を無効にします(今すぐ停止はしません)。 |
| systemctl is-active UNIT | サービスが動作中か確認します(active / inactive)。 |
| systemctl is-enabled UNIT | 自動起動が有効か確認します(enabled / disabled)。 |
| systemctl list-units | 現在ロード済みのユニット一覧を表示します。 |
| systemctl list-unit-files | インストール済みのユニットファイル一覧と自動起動状態を表示します。 |
| systemctl daemon-reload | ユニットファイルの変更を systemd に再読み込みさせます。 |
サービス管理の基本
『capsule_corp_api.service』を起動して状態を確認します。
sudo systemctl start capsule_corp_api
systemctl status capsule_corp_api
● capsule_corp_api.service - Capsule Corp API Server
Loaded: loaded (/etc/systemd/system/capsule_corp_api.service; enabled; preset: disabled)
Active: active (running) since Thu 2026-04-09 10:00:00 JST; 3s ago
Main PID: 12345 (python3)
サービスを停止・再起動します。
sudo systemctl stop capsule_corp_api sudo systemctl restart capsule_corp_api
OS 起動時の自動起動を有効にします。『enable』は次回起動時の設定であり、今すぐ起動するわけではありません。
sudo systemctl enable capsule_corp_api sudo systemctl start capsule_corp_api
enable --now を使うと自動起動の有効化と即時起動を一度に行えます。
sudo systemctl enable --now capsule_corp_api
サービスの一覧を表示します。『list-units』は現在ロード済みのもの、『list-unit-files』はインストール済みのもの全てを表示します。
systemctl list-units --type=service systemctl list-unit-files --type=service UNIT FILE STATE PRESET capsule_corp_api.service enabled disabled dragon_radar.service disabled disabled gravity_chamber.service enabled disabled
ユニットファイルの場所
ユニットファイル(『.service』ファイル)は以下のディレクトリに配置します。
| パス | 用途 |
|---|---|
| /etc/systemd/system/ | 管理者が作成・カスタマイズしたユニットファイルの置き場所。最優先で読み込まれます。 |
| /usr/lib/systemd/system/ | パッケージマネージャー(yum/apt 等)がインストールしたユニットファイル。直接編集すると、パッケージ更新時に上書きされます。 |
| /run/systemd/system/ | 実行時に動的に生成されるユニットファイル。再起動すると消えます。 |
パッケージのユニットファイルをカスタマイズしたい場合は /etc/systemd/system/ に同名ファイルを置くか、systemctl edit でドロップインファイルを作成します。
sudo systemctl edit dragon_radar
自作サービスの作り方
/etc/systemd/system/ にユニットファイルを作成することで、独自のプロセスをサービスとして管理できます。ファイル名は サービス名.service とします。
/etc/systemd/system/gravity_chamber.service
[Unit] Description=Gravity Chamber Training Scheduler After=network.target [Service] Type=simple User=vegeta ExecStart=/usr/local/bin/gravity_chamber_server --config /etc/gravity_chamber/config.yml ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
ファイル作成後は daemon-reload を実行してから起動します。
sudo systemctl daemon-reload
sudo systemctl enable --now gravity_chamber
systemctl status gravity_chamber
● gravity_chamber.service - Gravity Chamber Training Scheduler
Loaded: loaded (/etc/systemd/system/gravity_chamber.service; enabled; preset: disabled)
Active: active (running) since Thu 2026-04-09 10:05:00 JST; 2s ago
主要なセクションと設定項目の意味は以下の通りです。
| セクション / キー | 概要 |
|---|---|
| [Unit] Description | サービスの説明文。systemctl status で表示されます。 |
| [Unit] After | このサービスを起動する前に起動しておくべきユニットを指定します(依存関係)。 |
| [Service] Type | プロセスの起動形式。『simple』(フォアグラウンド常駐)、『forking』(fork してデーモン化)、『oneshot』(一度実行して終了)などがあります。 |
| [Service] User | 実行ユーザー。省略するとrootで動きます。 |
| [Service] ExecStart | 起動コマンド。絶対パスで記述します。 |
| [Service] Restart | プロセスが終了した際の再起動ポリシー(on-failure、always 等)。 |
| [Install] WantedBy | enable 時にどのターゲットから参照されるかを指定します。通常は multi-user.target。 |
journalctl でログ確認
systemd のログは journalctl コマンドで確認します。-u オプションでサービスを絞り込めます。
journalctl -u gravity_chamber Apr 09 10:05:00 server gravity_chamber_server[12345]: Starting Gravity Chamber... Apr 09 10:05:01 server gravity_chamber_server[12345]: Gravity multiplier set to 450G
-f オプションを付けるとリアルタイムでログを追跡します(Ctrl+C で終了)。
journalctl -u gravity_chamber -f
--since と --until で時間範囲を絞り込めます。
journalctl -u capsule_corp_api --since "2026-04-09 09:00:00" journalctl -u capsule_corp_api --since "1 hour ago" journalctl -u capsule_corp_api --since today
複数サービスのログをまとめて確認したい場合は -u を繰り返します。
journalctl -u gravity_chamber -u dragon_radar --since today
service コマンドとの違い
service コマンドは SysVinit(System V init)時代の互換コマンドです。systemd 環境では service を実行すると内部で systemctl に転送されます。
| service(SysVinit) | systemctl(systemd) |
|---|---|
| service nginx start | systemctl start nginx |
| service nginx stop | systemctl stop nginx |
| service nginx restart | systemctl restart nginx |
| service nginx status | systemctl status nginx |
| chkconfig nginx on | systemctl enable nginx |
| chkconfig nginx off | systemctl disable nginx |
service は SysV スクリプト(/etc/init.d/)を直接呼び出すシンプルな仕組みであり、依存関係の管理・ログ収集・ソケット起動・cgroup によるリソース管理といった systemd の高度な機能は持っていません。
概要
systemd の最小単位は「ユニット」と呼ばれ、.service(サービス)、.socket(ソケット)、.timer(タイマー)、.mount(マウントポイント)など種類があります。systemctl はこれらすべてのユニットを管理するフロントエンドです。
enable は /etc/systemd/system/multi-user.target.wants/ などにシンボリックリンクを作成することで自動起動を実現しています。disable はそのリンクを削除するだけであり、サービスの停止とは無関係です。
reload はプロセスを終了させずに設定ファイルを再読み込みさせます(サービスが対応している場合のみ有効)。nginx などは reload に対応していますが、対応していないサービスでは restart を使う必要があります。
よくあるミス
よくあるミス1: enable と start の違いを混同する
enable は「次回 OS 起動時に自動起動する」設定であり、今すぐサービスを起動するわけではありません。インストール直後に enable だけ実行して「なぜ動いていないのか」と戸惑うケースがよくあります。
sudo systemctl enable dragon_radar
sudo systemctl status dragon_radar
○ dragon_radar.service - Dragon Radar Service
Loaded: loaded (/etc/systemd/system/dragon_radar.service; enabled; preset: disabled)
Active: inactive (dead)
enabled でも Active: inactive になります。今すぐ動かすには start も必要です。
sudo systemctl enable dragon_radar
sudo systemctl start dragon_radar
systemctl status dragon_radar
● dragon_radar.service - Dragon Radar Service
Loaded: loaded (/etc/systemd/system/dragon_radar.service; enabled; preset: disabled)
Active: active (running) since Thu 2026-04-09 10:10:00 JST; 1s ago
有効化と起動を一度に行いたい場合は enable --now を使います。
sudo systemctl enable --now dragon_radar
よくあるミス2: daemon-reload を忘れてユニットファイルの変更が反映されない
ユニットファイルを編集しても、daemon-reload を実行しないと systemd は変更を認識しません。そのまま restart しても古い設定で動き続けます。
sudo vi /etc/systemd/system/training_scheduler.service sudo systemctl restart training_scheduler Warning: The unit file, source configuration file or drop-ins of training_scheduler.service changed on disk. Run 'systemctl daemon-reload' to reload units.
正しい手順は「編集 → daemon-reload → restart」の順番です。
sudo vi /etc/systemd/system/training_scheduler.service sudo systemctl daemon-reload sudo systemctl restart training_scheduler
systemctl edit UNIT を使った場合は daemon-reload が自動的に実行されるため、手動での実行は不要です。直接ファイルを編集した場合のみ daemon-reload が必要になります。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。