supervisor的安裝、項目配置以及常見報錯

一、Supervisor安裝與配置文件

可參考    https://blog.csdn.net/yuanqs_1992/article/details/80833898進行下載安裝

 

二、Supervisor下項目的配置

1、進入/etc/supervisor/conf.d目錄,這裏假設你要配置的項目名稱爲myproject:

則創建配置文件:

touch myproject.conf

2、然後編輯配置文件:

vim myproject.conf

複製粘貼如下幾行:

  

[program: myproject]
 
directory=/home/dlnu/myproject
environment=PYTHONPATH=/home/dlnu/myproject
command= python3 /home/dlnu/myproject/manage.py
autorestart=true ; 程序意外退出是否自動重啓
autostart=true ; 是否自動啓動
stderr_logfile=/etc/supervisor/conf.d/myproject.err.log ; 錯誤日誌文件
stdout_logfile=/etc/supervisor/conf.d/myproject.out.log ; 輸出日誌文件
stopsignal=INT
startsecs=0 ; 自動重啓間隔
 
 根據你項目的實際情況修改, 保存退出後重新加載一下:

supervisorctl reload

這樣就大功告成!

supervisorctl restart project_name            # 重啓項目的supervisor

 

 

三、常用命令

查看單個任務狀態:supervisorctl status 

查看任務狀態:supervisorctl status
啓動守護進程:supervisord -c /etc/supervisor/supervisord.conf

啓動任務:supervisorctl start 服務名

停止任務:supervisorctl stop 服務名

重啓任務:supervisorctl restart 服務名
重載配置:supervisorctl reload

 

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

第一類:
報錯信息: unix:///tmp/supervisor.sock no such file

解決辦法: 原因是supervisor默認配置會把socket文件和pid守護進程生成在/tmp/目錄下,/tmp/目錄是緩存目錄,Linux會根據不同情況自動刪除其下面的文件。

1. 創建 supervisor.sock :
sudo touch /var/run/supervisor.sock 
sudo chmod 777 /var/run/supervisor.sock 

2.  vi /etc/supervisord.conf 打開配置文件,修改如下標示的幾行即可:

[unix_http_server]
;file=/tmp/supervisor.sock   ; (the path to the socket file)
file=/var/run/supervisor.sock   ; 修改爲 /var/run 目錄,避免被系統刪除
 
[supervisord]
;logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile=/var/log/supervisor/supervisord.log ; 修改爲 /var/log 目錄,避免被系統刪除
pidfile=/var/run/supervisord.pid ; 修改爲 /var/run 目錄,避免被系統刪除
...
 
[supervisorctl]
; 必須和'unix_http_server'裏面的設定匹配
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=unix:///var/run/supervisor.sock ; 修改爲 /var/run 目錄,避免被系統刪除
3. 再嘗試重新啓動:supervisord -c /etc/supervisor/supervisord.conf()

注:若出現報錯[unix:/// var/run/supervisor.sock refused connection]也可以運行此條命令

4.更新配置文件

supervisorctl update
至此就可以了,socket文件supervisor.sock和守護進程supervisord.pid兩個文件放在/var/run/下面,log文件supervisord.log放在/var/log/下面。如果還不行,則重啓服務器。

第二類:
報錯信息: 
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之後居然就可以跑了。。。。嗯,很不合常理,但是對我來說確實管用了。
--------------------- 
作者:Jz江城子 
來源:CSDN 
原文:https://blog.csdn.net/weixin_41762173/article/details/86678064 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章