supervisord.serviceファイルとは
supervisorをsystemctlコマンド動くように登録するための設定ファイルです。
以下のディレクトリにsupervisord.serviceファイルを用意します。
/etc/systemd/system/
先人の知恵
これまで多くの方が、このファイルの作成方法を指南してくださっています。
設定ファイルの中身は大体以下のような感じです。
[Unit]
Documentation=http://supervisord.org
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord/supervisord.conf
ExecReload=/usr/local/bin/supervisorctl reload
ExecStop=/usr/local/bin/supervisorctl shutdown
User=root
[Install]
WantedBy=multi-user.target
しかし、私の環境では上記ファイル内容では正しくsystemctlコマンドが動きませんでした。
問題点
以下のsystemctlコマンドがうまく動きませんした。
# 再起動
systemctl restart supervisord
# 停止
systemctl stop supervisord
出現したエラーは以下の通りです。
supervisord[12]: Traceback (most recent call last):
supervisord[12]: File "/usr/local/bin/supervisord", line 5, in <module>
supervisord[12]: from supervisor.supervisord import main
supervisord[12]: ModuleNotFoundError: No module named 'supervisor'
error: <class 'ConnectionRefusedError'>, [Errno 111] Connection refused: file: /usr/lib64/python3.7/socket.py line: 716
解決策
色んなサイトを巡りましたが、中々解決には至りませんでした。
しかし、以下のStackOverFlowに答えがありました。
要約すると、、、
supervisorctlコマンドにも、-c
オプションをつけてconfファイルのパス(supervisord.conf)を指定してやるべきとのことです。
supervisorctlコマンドは、-c
オプションがない場合、デフォルトで下記のパスに設定ファイルを探しに行くそうです。
$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf
なので、上記パス以外にconfファイルを作成している方は、supervisorctlコマンドにも-c
オプションをつけてあげてください。
私の場合は/etc/supervisord/
ディレクトリにconfファイルを作成していたので、-c
オプションが必要でした。
以下のような設定ファイルに変更したところエラーなく動きました。
[Unit]
Documentation=http://supervisord.org
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord/supervisord.conf
# -cオプション 追記
ExecReload=/usr/local/bin/supervisorctl -c /etc/supervisord/supervisord.conf reload
# -c オプション追記
ExecStop=/usr/local/bin/supervisorctl -c /etc/supervisord/supervisord.conf shutdown
User=root
[Install]
WantedBy=multi-user.target
最後に
supervisorctlコマンドには、-cオプションは要らないものだと勝手に思い込んでいました。。
もっと柔軟な考え方ができる頭が欲しいです。。
同じようなエラーで困っている方の助けになれば、幸いです。