iT邦幫忙

0

伸縮自如的Flask [day 27] Supervisor

像gunicorn 及docker 有著執行時timeout的防止錯誤發生的機制,
但是要是超過了 timeout的設定,程式就不再運行的情況發生時,該怎麼辦呢?

也許可以試一下Supervisor這個套件,官網的文件:

http://supervisord.org/introduction.html

安裝:

sudo apt-get install supervisor

再來,可以看一下套件設定檔的範例:

echo_supervisord_conf

https://ithelp.ithome.com.tw/upload/images/20210610/20122678VRaTeQssaH.png

可以將範例檔存於目前的路徑:

echo_supervisord_conf > supervisord.conf

未來使用該路徑conf來運行:

sudo supervisord --configuration=/current/directory/path/supervisord.conf

如果使用預設在/etc/supervisor/supervisord.conf的檔案來運行:

sudo supervisorctl reread
sudo service supervisor restart

那我們可以修改conf來進行設定:

[program:<app名稱>]
directory=/home/username/<app名稱>
command=gunicorn app:app -b 127.0.0.1:8000 --reload 
autostart=true
autorestart=true
stderr_logfile=/var/log/error.log
stdout_logfile=/var/log/output.log
  • directory: app所在位置
  • command:監控及重起時指令
  • autostart:supervisord啟動時,執行程式
  • autorestart:程式沒執行時,重新啟動

可以參考的conf設定:


[unix_http_server]
file=/tmp/supervisor.sock 

[supervisord]
logfile=/tmp/supervisord.log 
logfile_maxbytes=50MB        
logfile_backups=10           
loglevel=info                
pidfile=/tmp/supervisord.pid 
nodaemon=false               
silent=false                 
minfds=1024                  
minprocs=200 

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

[program:hello_api]
command=bash -c "source /home/wilson/miniconda3/bin/activate &&  gunicorn -w 4 main:app  -b 0.0.0.0:5000 --reload"
directory=/home/wilson/health/health_factory_api
autostart=true                ; start at supervisord start (default: true)
autorestart=true

設定完成,可以重新啟動supervisor來監控服務。
藉由supervisorctl來查看是否監控成功:

sudo supervisorctl -c xxx.conf

尚未有邦友留言

立即登入留言