一,安裝問題及解決
我這里習慣使用 easy_install supervisor 方式安裝,以下的問題圍繞這種安裝方式。
問題1, ImportError: No module named pkg_resources解決方案
這個問題通常是由於升級到python2.7后執行pip產生的解決方案是重新在python2.7環境中安裝pip
1.安裝distribute
wget https://pypi.python.org/packages/source/d/distribute/distribute-0.7.3.zip --no-check-certificate
unzip distribute-0.7.3.zip
cd distribute-0.7.3
python setup.py install
2.安裝setuptool
去這個地址 https://pypi.python.org/pypi/setuptools 下載最新版
下載解壓 並且python setup.py install
3.安裝pip
easy_install pip
4.安裝pip的時候如果報錯 ImportError: No module named extern異常
解決:在https://pypi.python.org/pypi/extern 下載最新extern安裝后再次安裝步驟pip.
二, 配置使用問題及解決
1,生成配置文件 echo_supervisord_conf > /etc/supervisor/supervisord.conf “這個路勁自己安排”
2,修改配置文件 主要是下面幾點
(1)這個一般默認不用修改
[unix_http_server]
file=/tmp/supervisor.sock ; the path to the socket file
chmod=0700 ; socket file mode (default 0700)
(2)這個一般默認不用修改
[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200
(3) 自定義配置文件的落腳點
[include] //一定要注意前面的分號 一點要去掉 不然這個模塊沒法加載
files = /etc/supervisor/conf.d/*.conf //配置文件路徑 相對、絕對路徑都可以
3,問題 Unlinking stale socket /XXXXX/XXXX/supervisor.sock
解決:unlink /XXXX/XXXXX/supervisor.sock
4,啟動或者其他情況下出現 ImportError: cannot import name process_or_group_name 請見上面安裝哪里
5,出現 unix:///var/run/supervisor.sock no such file 可能是supervisor服務沒有啟動
解決:service supervisor start
6,出現 error: <class ‘socket.error’>, [Errno 2] No such file or directory: file:/usr/lib/python2.7/socket.py line: 224
可能是supervisor服務沒有啟動 解決:service supervisor start
三,配置文件詳解
[program:queue_worker] ;項目名稱
directory = /www/tp5 ; 程序的啟動目錄
command = php think queue:work --queue addData --daemon ; 啟動命令
process_name=%(program_name)s_%(process_num)02d
numprocs = 3 ; 開啟的進程數量
autostart = true ; 在 supervisord 啟動的時候也自動啟動
startsecs = 5 ; 啟動 5 秒后沒有異常退出,就當作已經正常啟動了
autorestart = true ; 程序異常退出后自動重啟
startretries = 3 ; 啟動失敗自動重試次數,默認是 3
user = www ; 用哪個用戶啟動
redirect_stderr = true ; 把 stderr 重定向到 stdout,默認 false
stdout_logfile_maxbytes = 50MB ; stdout 日志文件大小,默認 50MB
stdout_logfile_backups = 20 ; stdout 日志文件備份數、
loglevel = info ;記錄等級 有critical, error, warn, info, debug, trace, or blather等
; stdout 日志文件,需要手動創建目錄(supervisord 會自動創建日志文件)
stdout_logfile = /www/supervisor/log/queue_worker.log
四,其他注意
1,修改了Supervisor 的配置信息后,必須執行下面命令
sudo supervisorctl reload
sudo supervisorctl update
2,個人猜想
在ubuntu和centos中開啟一個項目 直接是 supervisorctl start name, 但是在Redhat中需要
supervisorctl start name:* 這是我遇到的問題。
***轉載請務必注明來源 謝謝