supervisor是一款很好用的進(jìn)程管理工具展姐,其命令也很簡單,其安裝過程如下:
ubuntu16:
首先保證本地的python環(huán)境是ok的,且python是2.x版本的,如有多個(gè)版本需要切換到2.x,參考ubuntu中切換python版本
supervisor安裝
ubuntu安裝:
sudo apt-get install supervisor
centos安裝:
yum install -y supervisor
基于python庫安裝
pip2 install supervisor
easy_install supervisor
安裝好之后喊熟,不出問題的話supervisor服務(wù)已經(jīng)啟動(dòng)完成困介。
配置文件在/etc/supervisor/conf.d/
路徑下,
supervisor管理進(jìn)程的配置文件,這里就簡單舉例:
[program:task] #管理進(jìn)程的命名
command=python test.py -c test.conf #執(zhí)行的命令
stderr_logfile=/var/log/supervisor/test.log #錯(cuò)誤日志輸出路徑
stdout_logfile=/var/log/supervisor/test.log #日志輸出路徑
directory=/root/test #命令執(zhí)行的工作空間
autostart=true #自動(dòng)啟動(dòng)
user=root #指定用戶
autorestart=true #自動(dòng)重啟</pre>
進(jìn)程配置文件配好之后铃诬,然后執(zhí)行:
supervisorctl reload
至此配置基本完成祭陷,進(jìn)程也啟動(dòng)起來了。
supervisor有supervisord和supervisorctl兩種命令類型趣席,supervisord是服務(wù)相關(guān)的命令兵志,supervisorctl是客戶端相關(guān)的命令,它們的使用方法很簡單.
查看supervisorctl和啟動(dòng)子進(jìn)程方式
supervisorctl status #查看supervisorctl狀態(tài)
supervisorctl start nginx #啟動(dòng)子進(jìn)程nginx
supervisorctl stop nginx #關(guān)閉子進(jìn)程nginx
supervisorctl restart nginx #重啟子進(jìn)程nginx
Supervisor管理進(jìn)程狀態(tài)轉(zhuǎn)換圖
說明:
running:進(jìn)程處于運(yùn)行狀態(tài)
starting:Supervisor 收到啟動(dòng)請(qǐng)求后,進(jìn)程處于正在啟動(dòng)過程中
stopped:進(jìn)程處于關(guān)閉狀態(tài)
stopping:Supervisor 收到關(guān)閉請(qǐng)求后宣肚,進(jìn)程處于正在關(guān)閉過程中
backoff:進(jìn)程進(jìn)入 starting 狀態(tài)后想罕,由于馬上就退出導(dǎo)致沒能進(jìn)入 running 狀態(tài)
fatal:進(jìn)程沒有正常啟動(dòng)
exited:進(jìn)程從 running 狀態(tài)退出
常用命令:
supervisorctl start programxxx,啟動(dòng)某個(gè)進(jìn)程
supervisorctl restart programxxx钉寝,重啟某個(gè)進(jìn)程
supervisorctl stop groupworker: 弧呐,重啟所有屬于名為groupworker這個(gè)分組的進(jìn)程(start,restart同理)
supervisorctl stop all,停止全部進(jìn)程嵌纲,注:start俘枫、restart、stop都不會(huì)載入最新的配置文件逮走。
supervisorctl reload鸠蚪,載入最新的配置文件,停止原有進(jìn)程并按新的配置啟動(dòng)师溅、管理所有進(jìn)程茅信。
supervisorctl update,根據(jù)最新的配置文件墓臭,啟動(dòng)新配置或有改動(dòng)的進(jìn)程蘸鲸,配置沒有改動(dòng)的進(jìn)程不會(huì)受影響而重啟。
supervisor啟動(dòng)和停止的日志文件存放在/var/log/supervisor/supervisord.log
注意:顯式用stop停止掉的進(jìn)程窿锉,用reload或者update都不會(huì)自動(dòng)重啟
常見報(bào)錯(cuò):
Traceback (most recent call last):
File "/usr/local/bin/supervisorctl", line 7, in <module>
from supervisor.supervisorctl import main
File "/usr/local/lib/python2.7/dist-packages/supervisor/supervisorctl.py", line 36, in <module>
from supervisor.options import ClientOptions
File "/usr/local/lib/python2.7/dist-packages/supervisor/options.py", line 26, in <module>
from supervisor.datatypes import process_or_group_name
ImportError: cannot import name process_or_group_name #這是在執(zhí)行supervisor相關(guān)命令報(bào)的錯(cuò)酌摇,基本可以看出是安裝的問題
#解決方式
easy_install supervisor
root@ubuntu:~# supervisorctl
unix:///var/run/supervisor.sock no such file
supervisor>
#這有可能是由于supervisor服務(wù)沒有啟動(dòng) #解決辦法
service supervisor start
error: <class ‘socket.error’>, [Errno 2] No such file or directory: file:/usr/lib/python2.7/socket.py line: 224
#錯(cuò)誤原因可能是 supervisor 服務(wù)未啟動(dòng) #解決辦法 service supervisor start
#也有可能是配置文件中沒有指定用戶 #解決辦法
進(jìn)入/etc/supervisor/conf.d
找到指定的配置文件,加入 user=root