laravel のキューイング処理などで supervisor を動作させていたのですが、ある日突然 supervisorctl 実行時にエラーがでるようになってしまいました
# XXX@XXX:~/app$ /usr/bin/supervisorctl status
unix:///tmp/supervisor.sock no such file
socket ファイルがなくて怒られているようですが、今まで動いていたのに何で?と思い調べた時のメモになります。
結論
お察しの方も多いかもしれませんが、supervisor の設定ファイルで指定できるソケットパスを /tmp
以外に指定すれば解決しました。
[unix_http_server]
と [supervisorctl]
に設定が必要で、具体的には以下のようになります。
[unix_http_server]
;file=/tmp/supervisor.sock ; デフォルトだと /tmp に作られる。
file=/var/run/supervisor.sock
...(中略)
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
...(中略)
多くのディストリビューションで /tmp 配下のファイルは定期的にお掃除されるようになっています。
supervisor のデフォルト設定では /tmp 以下にソケットを作ろうとするので、折角作られたソケットファイルが掃除されてしまっていたことが原因でした。
ちなみに今回の自分の実行環境は amazon linux 2023 で、10 日ごとに tmp ディレクトリ配下をお掃除する設定が入っていました。確認時のコマンドは以下です。
# XXX@XXX:~/app$ /usr/lib/tmpfiles.d/tmp.conf
q /tmp 1777 root root 10d # /tmp 以下は 10 days で消える
q /var/tmp 1777 root root 30d
コメント