言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Linux & Mac & Bashコマンド辞典

  1. トップページ
  2. Linux & Mac & Bashコマンド辞典
  3. systemctl / service

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 UNITOS 起動時にサービスを自動起動するよう設定します(今すぐ起動はしません)。
systemctl disable UNITOS 起動時の自動起動を無効にします(今すぐ停止はしません)。
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-failurealways 等)。
[Install] WantedByenable 時にどのターゲットから参照されるかを指定します。通常は 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 startsystemctl start nginx
service nginx stopsystemctl stop nginx
service nginx restartsystemctl restart nginx
service nginx statussystemctl status nginx
chkconfig nginx onsystemctl enable nginx
chkconfig nginx offsystemctl 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 が必要になります。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。