動作環境
- Movable Type 7
以下のドキュメントを元に、CGI→PSGI環境に移行
原因
長期間停止にしていたMovable Type(以下MT)用のサーバを起動した際に、PSGI環境でMTを実行するプロセス(Starman)が起動していないことが判明。
調べてみると、設定していたはずのプロセスIDを格納する/var/run/mt/mt.pid
とそのディレクトリの/var/run/mt
が消失していたことが原因と断定。
また、以下のコマンドでプロセス監視用に導入したsupervisord
のMT用プログラムの状態が、何故かSTARTING
と表示。
(本来ならRUNNING
の状態が望ましい。)
sudo /etc/init.d/supervisord status
movabletype RUNNING pid 18783, uptime 0:02:16
movabletype STARTING
調べてみると、設定していたはずのプロセスIDを格納する/var/run/mt/mt.pid
とそのディレクトリの/var/run/mt
が消失していたことが反映。
それにより、どのファイルを参照すれば良いか不明であったため、503エラーが発生したものと断定。
解決法
手動で/var/run/mt
と/var/run/mt/mt.pid
を作成すれば一応は解決するが、停止や再起動の度に手動作成するのは手間なので自動設定する方法を考案。
最初に/var/run/mt
と/var/run/mt/mt.pid
を作成するスクリプトを作成。
スクリプト名を/usr/local/bin/setup_mt.sh
とし、以下の内容を記載。
#!/bin/bash
# /var/run/mtディレクトリがない場合は作成
if [ ! -d /var/run/mt ]; then
mkdir /var/run/mt
fi
# /var/run/mt/mt.pidファイルがない場合は作成し、仮のプロセスID(ここでは「11111」を設定
if [ ! -f /var/run/mt/mt.pid ]; then
echo "11111" > /var/run/mt/mt.pid
fi
# ディレクトリの所有者をapacheユーザーに変更
# $HTTPDUSERが別の場合は、必要に応じて変更
chown -R apache:apache /var/run/mt
作成後、スクリプトに実行権限を付与。
sudo chmod +x /usr/local/bin/setup_mt.sh
次にSystemdユニットファイルを作成。
ここでは/etc/systemd/system/setup_mt.service
という名前で作成。
Systemdユニットファイルを作成することで、上記スクリプトをsshd
やhttpd
のようにシステム化、自動起動の設定を行うことができる。
# サービスの説明
# ここでは「MTディレクトリとPIDファイルの設定」と記載
[Unit]
Description=Setup MT Directory and PID File
[Service]
# サービスの種類を指定
# 「ExecStart」で指定したコマンドを実行して、それが完了したタイミングで起動完了(かつサービス終了)と判断
Type=oneshot
# サービスを開始するために実行されるコマンドを指定
ExecStart=/usr/local/bin/setup_mt.sh
# コマンドが終了した後もサービスをアクティブなままにすることを指定
RemainAfterExit=true
[Install]
# システムが複数ユーザーでの利用を許可する標準のマルチユーザーモードであることを指定
WantedBy=multi-user.target
Systemdユニットファイルを作成後、Systemdサービスを有効化して、次回起動時に自動で実行されるようにする。
sudo systemctl enable setup_mt.service
sudo systemctl start setup_mt.service
最後にSystemdサービスが正しく動作するかを確認する。
sudo systemctl status setup_mt.service
[opc@mt-server ~]$ sudo systemctl status setup_mt.service
● setup_mt.service - Setup MT Directory and PID File
Loaded: loaded (/etc/systemd/system/setup_mt.service; enabled; preset: disabled)
Active: active (exited) since Thu 2024-08-01 13:59:22 JST; 1h 47min ago
Process: 1554 ExecStart=/usr/local/bin/setup_mt.sh (code=exited, status=0/SUCCESS)
Main PID: 1554 (code=exited, status=0/SUCCESS)
CPU: 4ms
8月 01 13:59:22 mt-cloudii8 systemd[1]: Starting Setup MT Directory and PID File...
8月 01 13:59:22 mt-cloudii8 systemd[1]: Finished Setup MT Directory and PID File.
以上で、システム起動時にスクリプトが自動的に実行されるようになる。
Systemdサービスとして設定することで、スクリプトの実行順序や依存関係を管理しやすくなり、サービスの再起動も簡単に行うことができる。