問題1 refused connection
問題現象
$ supervisorctl -c /root/ppe-detection/supervisord.conf
unix:///root/supervisor.sock refused connection
原因分析
supervisor 主要包含2個組件(實際還有別的):
- supervisord
主進程,負責管理進程的server,它會根據配置文件創建指定數量的應用程序的子進程,管理子進程的整個生命週期,對crash的進程重啓,對進程變化發送事件通知等。 - supervisorctl
客户端的命令行工具,提供一個類似shell的操作接口
每次使用 supervisorctl,需要先保證supervisord正常運行。
解決辦法
# 1. 需要把之前開啓的關於supervisor的都kill掉,先查看supervisor(本身也是基於python的)和其運行的python進程
$ ps aux | grep python
# kill可以下面這條指令,把supervisor和其運行的python進程全殺了
$ ps -ef | grep python | grep -v grep | awk '{print $2}' | xargs kill -9
# 2. 重新開啓supervisord
$ sudo supervisord -c supervisord.conf
# 3. 如果沒有報錯,則可以使用supervisorctl了
$ supervisorctl
問題2 unlinking stale socket
問題現象
$ sudo supervisord -c supervisord.conf
Unlinking stale socket /{some_dir}/supervisor.sock
問題分析
它説正在解除連接舊socket,那麼幫它直接解除就好了。
問題解決
$ sudo supervisord -c supervisord.conf
Unlinking stale socket /{some_dir}/supervisor.sock
# 使用unlink指令,把上面這個supervisor.sock的路徑複製下來
$ unlilnk /{some_dir}/supervisor.sock
# 然後就可以正常使用了
$ sudo supervisord -c supervisord.conf
$ supervisorctl
reference
supervisor原理及如何使用
linux下3種高效Kill掉所有python進程的方法(包括編寫運行腳本 .sh)