ubuntu中supervisor的安装及配置
supervisor是一款很好用的进程管理工具,其命令也很简单,其安装过程如下:
ubuntu16:
首先保证本地的python环境是ok的,且python是2.x版本的,如有多个版本需要切换到2.x,参考ubuntu中切换python版本
supervisor安装
ubuntu安装:
sudo apt-get install supervisor
centos安装:
yum install -y supervisor
基于python库安装
pip2 install supervisor
easy_install supervisor
安装好之后,不出问题的话supervisor服务已经启动完成。
配置文件在/etc/supervisor/conf.d/
路径下,
supervisor管理进程的配置文件,这里就简单举例:
[program:task] #管理进程的命名
command=python test.py -c test.conf #执行的命令
stderr_logfile=/var/log/supervisor/test.log #错误日志输出路径
stdout_logfile=/var/log/supervisor/test.log #日志输出路径
directory=/root/test #命令执行的工作空间
autostart=true #自动启动
user=root #指定用户
autorestart=true #自动重启</pre>
进程配置文件配好之后,然后执行:
supervisorctl reload
至此配置基本完成,进程也启动起来了。
supervisor有supervisord和supervisorctl两种命令类型,supervisord是服务相关的命令,supervisorctl是客户端相关的命令,它们的使用方法很简单.
查看supervisorctl和启动子进程方式
supervisorctl status #查看supervisorctl状态
supervisorctl start nginx #启动子进程nginx
supervisorctl stop nginx #关闭子进程nginx
supervisorctl restart nginx #重启子进程nginx
Supervisor管理进程状态转换图
Supervisor管理进程状态转换图说明:
running:进程处于运行状态
starting:Supervisor 收到启动请求后,进程处于正在启动过程中
stopped:进程处于关闭状态
stopping:Supervisor 收到关闭请求后,进程处于正在关闭过程中
backoff:进程进入 starting 状态后,由于马上就退出导致没能进入 running 状态
fatal:进程没有正常启动
exited:进程从 running 状态退出
常用命令:
supervisorctl start programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
supervisor启动和停止的日志文件存放在/var/log/supervisor/supervisord.log
注意:显式用stop停止掉的进程,用reload或者update都不会自动重启
常见报错:
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 #这是在执行supervisor相关命令报的错,基本可以看出是安装的问题
#解决方式
easy_install supervisor
root@ubuntu:~# supervisorctl
unix:///var/run/supervisor.sock no such file
supervisor>
#这有可能是由于supervisor服务没有启动 #解决办法
service supervisor start
error: <class ‘socket.error’>, [Errno 2] No such file or directory: file:/usr/lib/python2.7/socket.py line: 224
#错误原因可能是 supervisor 服务未启动 #解决办法 service supervisor start
#也有可能是配置文件中没有指定用户 #解决办法
进入/etc/supervisor/conf.d
找到指定的配置文件,加入 user=root