はじめに
こんにちは。アメリカ在住で独学でエンジニアを目指している taira です。
今回は Linux 環境でシステムサービスを管理するためのコマンドである systemctl を取り上げて、基本的な使い方やよく使うオプションなどについて解説していきます。
systemctl とは?
systemctl は、systemd を採用している Linux システムでサービスやユニット (unit) を制御するためのコマンドです。systemd は、Linux のブートプロセスやサービスの管理を行う仕組みで、従来の SysVinit よりも機能が豊富かつモダンな設計を持っています。systemctl を使うことで、サービスの起動・停止・再起動はもちろん、サービスのステータス確認、起動時に自動で開始するかどうかの設定 (enable/disable) などを簡単に行えます。
ユニット (unit) について
systemd におけるユニットは大きく分けると以下の種類があります。
- service:特定のサービス (デーモン) を表すユニット
- target:サービスやユニットのグループ化や起動順序を設定するためのユニット
- socket:ソケットファイルに関するユニット
- device:ハードウェアデバイスに関するユニット
- mount:ファイルシステムのマウントに関するユニット
- timer:特定の時間や間隔でサービスを起動するためのユニット
これらを一括りにして管理できるのが systemctl というイメージです。
よく使う systemctl コマンド
以下、主にサービス (service) の制御に関する使い方を紹介します。
ステータスを確認する
systemctl status <サービス名>
指定したサービスの現在のステータスが表示されます。サービスが動作中かどうか、エラーを出していないかなどが確認できます。
サービスを起動する
sudo systemctl start <サービス名>
指定したサービスを起動します。sudo 権限が必要な場合があります。
サービスを停止する
sudo systemctl stop <サービス名>
指定したサービスを停止します。
サービスを再起動する
sudo systemctl restart <サービス名>
サービスを一度停止してから再度起動します。
サービスをリロードする
sudo systemctl reload <サービス名>
設定ファイルのみを再読み込み (リロード) します。再起動するほどのダウンタイムを発生させたくない場合などに便利です。
自動起動を有効化する
sudo systemctl enable <サービス名>
システムが起動する際に自動でサービスが開始されるように設定します。
自動起動を無効化する
sudo systemctl disable <サービス名>
システム起動時に自動でサービスを開始しないように設定します。
自動起動のステータスを確認する
systemctl is-enabled <サービス名>
このサービスが enable されているか、disable されているかをチェックします。
一覧を表示する
systemctl list-units --type=service
systemd で管理されているサービスの一覧が確認できます。--all
オプションを加えると、実行中ではないサービスも含めて表示されます。
systemctl を使う際の注意点
- 多くのコマンドでは、システムのサービス設定を変更するために管理者権限 (sudo) が必要です。
- 古い Linux ディストリビューションでは systemd を採用していない場合があり、その場合は systemctl が使えない可能性があります。SysVinit 系の場合は
service
コマンドや/etc/init.d/
以下のスクリプトで管理する形になります。 - 何か問題が起こった場合は、
systemctl status <サービス名>
でエラーログを確認する、あるいはjournalctl -xe
コマンドなどでサービスに関するログを詳細にチェックする方法があります。
まとめ
systemctl を使うことで、Linux 上でのサービス管理がとてもスムーズになります。サービスの起動・停止やステータス確認、自動起動の設定などの操作をまとめて制御できるのが大きな利点です。