こんにちは。ごえです。
今回は、Ubuntu上でApacheをSupervisorで管理し、
常時起動監視と自動再起動を行う構成を解説します。
利用環境
Ubuntu 22.04 LTS
Apache 2.4.52
Supervisor 4.2.1
Supervisorとは?
Supervisorは、特定のプロセスを管理・監視・再起動してくれるプロセス制御ツールです。
例えば、Apacheが何らかの原因で停止した場合でも、Supervisorによって自動的に再起動させることができます。
Supervisorのインストール
まずはSupervisorをインストールします。
sudo apt install -y supervisor
インストール確認:
supervisord --version
サービスの状態確認:
sudo systemctl status supervisor
Apacheが動作することを確認
Supervisorで管理する前に、Apacheが手動で起動することを確認しておきます。
$ sudo apt install -y apache2
$ sudo systemctl start apache2
$ sudo systemctl status apache2
今回はルートディレクトリ配下にテストページを設置しました。
ブラウザで正常にアクセスできることを確認します。
必要に応じてhosts設定等をしてください。
現状、systemctlコマンドによるApacheの起動が確認されました。
後の手順でSupervisorによる起動を実施していきます。
一旦Apacheは停止させておきます。
Supervisorの設定ファイルを作成
SupervisorがApacheを管理するための設定ファイルを作成します。
$ sudo vi /etc/supervisor/conf.d/apache.conf
「apache.conf」というファイル名は任意です。
以下を貼り付け:
command=/usr/sbin/apache2 -DFOREGROUND
directory=/ # プログラムを実行するディレクトリ(ルートに設定)
autostart=true # Supervisor起動時にApacheも自動起動
autorestart=true # Apacheが落ちたら自動再起動
startsecs=5 # 起動から5秒たって問題なければ「正常」と判断
startretries=3 # 起動失敗時、3回リトライ
user=root #起動ユーザー(Apacheはrootで起動→プロセス内部でユーザー切り替え)
environment=APACHE_RUN_DIR="/var/run/apache2",APACHE_PID_FILE="/var/run/apache2/apache2.pid",APACHE_LOCK_DIR="/var/lock/apache2",APACHE_LOG_DIR="/var/log/apache2",LANG="C",APACHE_RUN_USER="www-data",APACHE_RUN_GROUP="www-data" #環境変数を記述
次に設定ファイルを反映させます。
$ sudo supervisorctl reread
読み込んだ設定ファイルの反映
$ sudo supervisorctl update
SupervisorによってApacheを起動させる
$ sudo supervisorctl start apache2
【ポイント】
・「systemctl start apache2」のコマンドでApacheを起動させた場合、
Supervisorのプロセス管理下にないため、Supervisorによる再起動等ができないので注意。
・「systemctl start apache2」でApacheを起動させた状態で
「supervisorctl start apache2」を実行すると、Apacheを重複して起動させることになるのでエラーとなる。
その場合は、「systemctl stop apache2」を実行してからSupervisorでApacheを起動させる。
起動状態の確認
ApacheがSupervisorにより管理され、起動したかを確認します。
以下のように「RUNNING」と表示されたら、Supervisorによる起動が成功していると分かります。
apache2 RUNNING pid 3767716, uptime 21 days, 1:34:17
Apacheのプロセス確認:
$ ps aux | grep apache2
ポート確認:
$ sudo lsof -i :80
自動再起動のテスト
Supervisorによる自動再起動が機能するか確認します。
$ sudo pkill -f apache2
killしたらSupervisorが感知するため、即座にApacheが再起動されるはずです。
実際に再起動されたことを確認していきます。
$ sudo cat /var/log/supervisor/supervisord.log
2025-06-02 18:43:48,034 INFO exited: apache2 (exit status 0; expected)
2025-06-02 18:43:49,038 INFO spawned: 'apache2' with pid 4111043
2025-06-02 18:43:54,059 INFO success: apache2 entered RUNNING state, process has stayed up for > than 5 seconds (startsecs)
killすると、上記のように3行のログが記録されました。
1行目:Apacheが終了したことをSupervisorが感知
2行目:Apacheが再起動したことを記録
3行目:5秒以上継続Apacheが動作しているため、正常に起動したことを記録
何秒継続したら正常と判断するかは、前述の設定ファイルで指定しています。(/etc/supervisor/conf.d/apache.conf)
ブラウザでも正常にページが表示されたので、Supervisorによる自動起動が成功していることが確認できました。
以上です。