supervisord 是Linux/Unix系統下的一個進程管理工具
https://blog.csdn.net/fenglailea/article/details/77146248
[program:http-server] command = /root/.nvm/versions/node/v9.11.1/bin/http-server /var/www/sui -s redirect_stderr=true stdout_logfile=/var/www/sui.txt environment=PATH="/root/.nvm/versions/node/v9.11.1/bin"
排錯記得寫上
redirect_stderr
和
stdout_logfile
環境變量找不見時候記得加上
environment
Supervisor定期重啟指定進程
Supervisor是用Python開發的一個客戶機/服務器系統,允許用戶監視和控制UNIX類操作系統上的多個進程。功能包括監聽、啟動、停止、重啟一個或多個進程。當Supervisor管理的進程出現意外被Kill后,Supervisor監聽到事件會自動啟動該進程,不需要再寫其他腳本去進行重啟處理。
關於Supervisor的安裝及設定,可以參考Supervisor官網地址:http://supervisord.org/
Supervisor基本操作命令
1.啟動進程
supervisorctl -c /etc/supervisord.conf start program_name
- 1
2.停止進程
supervisorctl -c /etc/supervisord.conf stop program_name
- 1
3.重啟進程
supervisorctl -c /etc/supervisord.conf restart program_name
- 1
4.啟動所有進程
supervisorctl -c /etc/supervisord.conf start all
- 1
5.停止所有進程
supervisorctl -c /etc/supervisord.conf stop all
- 1
Supervisor自動重啟機制
Supervisor的 autorestart 參數可以設置進程自動重啟的事件,一般設置為:
autorestart=unexpected
- 1
當進程意外被kill或出現異常時,Supervisor會自動重啟該進程。
但如果Supervisor監控的進程出現內存泄漏或連接不自動釋放的情況,Supervisor並不會執行重啟,且Supervisor不支持定期自動重啟的方法。
因此當出現這種情況時,我們需要對某些進程進行定期自動重啟。
Supervisor定期重啟指定進程方法
我們可以利用crontab來實現定期任務,設置如下:
例: 每小時重啟進程abc
0 * * * * supervisorctl -c /etc/supervisord.conf restart abc
- 1
當對於某些會出現內存泄漏或連接不自動釋放的進程時,我們可以使用以上方法進行定期重啟,解決內存泄漏及釋放連接數。