0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】PSGI環境で動くMovable Type が503エラーになる場合の対処法

Posted at

動作環境

  • Movable Type 7

以下のドキュメントを元に、CGI→PSGI環境に移行

原因

長期間停止にしていたMovable Type(以下MT)用のサーバを起動した際に、PSGI環境でMTを実行するプロセス(Starman)が起動していないことが判明。

調べてみると、設定していたはずのプロセスIDを格納する/var/run/mt/mt.pidとそのディレクトリの/var/run/mtが消失していたことが原因と断定。

また、以下のコマンドでプロセス監視用に導入したsupervisordのMT用プログラムの状態が、何故かSTARTINGと表示。
(本来ならRUNNINGの状態が望ましい。)

supervisordのコマンド
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とし、以下の内容を記載。

/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ユニットファイルを作成することで、上記スクリプトをsshdhttpdのようにシステム化、自動起動の設定を行うことができる。

# サービスの説明
# ここでは「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サービスとして設定することで、スクリプトの実行順序や依存関係を管理しやすくなり、サービスの再起動も簡単に行うことができる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?