天天看點

supervisor常見報錯基本思路:常用指令具體報錯分析

基本思路:

  1. 首先我們要明确問題出在supervisor上還是啟動的程式上,可以用

    ps -ef | grep supervisord

    檢視是否啟動,在用ps檢視自己的程序有沒有啟動;
  2. 确認下啟動的supervisor配置檔案是哪個,有的是/etc/supervisor/supervisord.conf,有的是/etc/supervisord.conf,以自己的為準,不要弄混;
  3. 推薦使用apt-get安裝,其次是pip ,最後才是yum。不要問為什麼,踩坑踩得。另外,盡量用supervisord 3.x以上的版本,2.x版本出問題機率大;
  4. supervisord的日志在 /var/log/supervisor/supervisord.log,啟動失敗一般能再這裡找到有用的資訊

常用指令

  • 啟動守護程序:supervisord -c /etc/supervisor/supervisord.conf

  • 重載配置:supervisorctl reload

具體報錯分析

下面是三種常見的通用報錯:

第一類:

報錯資訊:

error: <class 'socket.error'>, [Errno 2] No such file or directory: file: <string> line: 1

解決辦法:

這個可能有多種原因,可能是已經啟動過了也可能是沒權限,解決步驟如下:

1. 先要确認是否已經啟動過了:’ps -ef | grep supervisord’

2. 如果有的話先kill掉

3. 運作下面指令:

sudo touch /var/run/supervisor.sock sudo chmod 777 /var/run/supervisor.sock

4. 再嘗試重新啟動:

supervisord -c /etc/supervisord.conf

(如果沒有檔案找個别人的配置拷貝過來或者運作echo_supervisord_conf > /etc/supervisord.conf)

第二類:

報錯資訊:

Error: .ini file does not include supervisorctl section

解決辦法:

又是一個權限問題的,步驟:

1. 先確定supervisord.conf中有[supervisord],[supervisorctl]有這兩個基本子產品,還有[program:XXX]自己程式的配置(可以在supervisord.conf也可以在/etc/supervisor/*.ini中)

2. 最關鍵的兩個指令:

chmod +x /usr/bin/supervisord chmod +x /usr/bin/supervisorctl chmod +x /etc/supervisord.conf

主要是把把相關檔案都授權了

3. 把supervisord殺掉後再次啟動supervisord

第三類:

報錯資訊:

Exited too quickly (process log may have details)

如果前面的問題都解決了,但還是會遇到這個問題,恭喜你已經離勝利很近了,起碼supervisord本身已經沒什麼問題了^_^

解決辦法:

1. 先确認[program:XXX]中自己的程式的command=<啟動指令>和 directory=<運作指令的路徑>沒有問題,python是不是用的自己要的環境的python(比如虛拟環境的),log檔案的檔案夾是不是已經建立(沒建立的話supervisor沒權限生成log檔案),以及改log檔案是不是授權給所有使用者了(可參考前面的解決辦法

chmod +x aaaaa.log

2. 確定用上面的配置中的command在指定路徑可以直接運作不會報錯,這時候一般就不會有什麼問題了。這時候tail你自己的log檔案一般就能看到log資訊,啟動失敗報錯的資訊也會在你的log檔案中,照着解決後

supervisorctl reload

就好了。

3. 如果上面的指令確定可以跑,但還是沒法正常運作,也看不到自己程式的報錯(不然你就能根據報錯解決問題了),那麼恭喜,你遇到了跟我一樣的情況。我的解決辦法很詭異,嘗試把[program:XXX]中的名字換成了一個跟啟動指令不一樣的另一個名字(不要太短),reload之後居然就可以跑了。。。。嗯,很不合常理,但是對我來說确實管用了。

可參考文章:

詳解supervisor程序管理

supervisor 程序管理