web-dev-qa-db-ja.com

Debian Wheezyのスーパーバイザー:別のプログラムは、HTTPサーバーの1つが使用するように構成されているポートで既にリッスンしています

service supervisor startを実行すると、次のエラーが発生します。

Starting supervisor: Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h

/ var/log/superuser/supervisord.logの内容:

2014-08-04 16:25:45,891 CRIT Supervisor running as root (no user in config file)
2014-08-04 16:25:45,891 WARN Included extra file "/etc/supervisor/conf.d/com.domain.subdomain.conf" during parsing

知っておくべきこと:
-Digital OceanサーバーでDebian Wheezyを使用しています。
-スーパーバイザーが使用するポートを同じ仕様のクリーンなVagrantボックスで確認しようとしましたが、同じエラーが発生しました。

どのポートがこのエラーの原因であるかを確認するにはどうすればよいですか?

42
balintant

.sockファイルのリンクを解除して問題を解決しました。

Sudo unlink /var/run/supervisor.sock

それでも解決しない場合は、/tmp/supervisor.sockでファイルをチェックしてリンクを解除してください。

56
balintant

これを端末に入力してください

ps -ef | grep supervisord

これらのように監視対象のPIDを取得します

root   2503  1  0 Nov19 ?  00:03:23 /usr/bin/python /usr/bin/supervisord
root   21337 2556  0 18:15 pts/8   00:00:00 grep --color=auto supervisord

そして、PIDは2503です

次に、これを入力します。

kill -s SIGTERM 2503  

うまくいくはず

42
N'faly Kaba

私の状況は少し具体的でしたが、これはまだ役に立つかもしれません。

同じホストでいくつかのdocker containerを実行していました。すべてのコンテナは ホストネットワーキングモード で実行されていました。各コンテナには、スーパーバイザーによって監視される複数のプロセスがありました。

最初のコンテナは常に表示され、他のコンテナはすべて、OPが言及した警告で失敗します:Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

私にとっての問題は、スーパーバイザー構成に次の行があることでした。

[inet_http_server]
port=127.0.0.1:9001

[supervisorctl]

最初のコンテナはポート9001に正常にバインドされ、後続の各コンテナは既に取得された同じポートにバインドしようとするため、起動に失敗します。

これらの行を次の行に置き換え、localhost:9001上のHTTPサーバーバインディングからUNIXドメインソケットで実行されているサーバーに切り替えました。

[unix_http_server]
file=/var/run/supervisor.sock

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

これにより、ポートの衝突が修正され、すべてのコンテナを起動できました。

6
turtlemonvh

@ N'falyKabaの回答に似ていますが、おそらくもう少し直接的なものです。Supervisorの新しいバージョンでは、supervisorctl pid pidを取得して強制終了し、再起動します。

$ kill -s SIGTERM $(supervisorctl pid)

再起動します:

$ supervisord -c /path/to/supervisord.conf

ソース: docs

4
Brad Solomon

ここでも同じ問題がありました。解決策はsystemctl stop supervisor.serviceはサービスを停止しませんでした。 supervisordはまだ実行されている可能性があります他の方法で考えていますが。

ソケットを手動でリンク解除する前に、必ず試してみてください。

私はよく/etc/init.d/supervisor restartけれども/etc/init.d/supervisor stop && /etc/init.d/supervisor start動作します。

3
karlsebal