目录
supervisor可以非常方便的管理后台持续运行的进程,在后台进程挂掉之后自动拉起并发出通知等
安装supervisor
1. easy_install supervisor 或pip install supervisor
如果另外安装了python3导致安装supervisor可执行文件目录变化找不到命令,可临时设置一下可执行文件目录
临时设置:export PATH=$PATH:/usr/local/python3/bin可执行文件目录
永久设置:修改/etc/profile文件(对所有用户有效,而修改当前用户下的.bash_profile文件对当前yoghurt有效),加export PATH=$PATH:/usr/local/python3/bin, source /etc/profile重载立即生效
2. 生成默认配置文件/etc/supervisor/supervisord.conf
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
默认文件路径
默认配置文件:/etc/supervisord.conf
进程管理配置文件放到:/etc/supervisord.d/目录下
默认日志文件:/tmp/supervisord.log,可以查看进程的启动信息
3. 配置文件修改
参考官方地址 http://supervisord.org/configuration.html
参考如下文章
4. 项目配置文件管理
进程管理配置参数,不建议全都写在supervisord.conf文件中,应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中
创建/etc/supervisor/config.d目录,用于存放进程管理的配置文件
修改/etc/supervisor/supervisord.conf中的include参数,将/etc/supervisor/config.d目录添加到include中,files = /etc/supervisor/config.d/*.conf
使用supervisor
1. 启动服务端
supervisord -c /etc/supervisor/supervisord.conf # 指定配置文件目录启动
设置开机启动,根据网上教程有多种方法
1.配置systemctl服务
进入/lib/systemd/system目录,并创建supervisor.service文件
设置开机启动
systemctl enable supervisor.service
systemctl daemon-reload
修改文件权限为766,chmod 766 supervisor.service
2.配置service类型服务
- 参考https://blog.csdn.net/xyang81/article/details/51555473
2. 客户端使用
交互终端: supervisorctl
supervisorctl -c /etc/supervisor/supervisord.conf # 指定配置文件目录启动交互终端
help/start/stop等命令
shell命令
supervisorctl status 查看状态
supervisorctl update 更新配置
pervisorctl stop program_name 停止某个进程
supervisorctl start program_name 启动某个进程, 不停supervisor 添加program
supervisorctl restart program_name 重启某个进程
supervisorctl stop all 关闭所有进程
supervisorctl reload 重新启动配置中的所有程序
supervisorctl update 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
web管理端
- 默认关闭,修改supervisord.conf配置文件打开,[inet_http_server] 项
常见错误
unix:///tmp/supervisor.sock no such file 未指定配置文件或客户端和服务端配置文件不一致导致
- supervisorctl -c /etc/supervisor/supervisord.conf start xxx保持配置文件一致即可(不加配置文件默认为/etc/supervisord.conf 依据安装时的选择)
- 如果以上无法解决,可能是由于tmp目录下文件被其他程序或系统清理导致,需要修改配置文件中的相关目录,参考以下
file=/var/run/supervisor.sock ; (the path to the socket file) logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log) pidfile=/var/run/supervisord.pid ; serverurl=unix:///var/run/supervisor.sock; 赋予文件夹权限 sudo chmod 777 /run sudo chmod 777 /var/log
supervisorctl error (no such process) 可能是[include]前的;未取消或files后紧接了;导致的
event 通知提醒
参考http://supervisord.org/events.html
http://talk.withme.me/?p=318
本文参考
[1]:https://www.jianshu.com/p/ac6c84a2f415
[2]:http://talk.withme.me/?p=318
[3]:http://supervisord.org/ “官网”