Supervisor进程管家:安装、配置、实例和报错问题处理

Supervisor是一个进程管理工具

用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了Supervisor

1、安装与配置

第一步:安装supervisor(前提要有python2)

wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz
tar zxvf supervisor-3.1.3.tar.gz
cd supervisor-3.1.3
python setup.py install

第二步:创建配置文件

echo_supervisord_conf > /etc/supervisord.conf

第三步:修改配置文件(注意:以下以数字开头的代表行号,可以直接定位修改)

mkdir /var/log/supervisord/
touch /var/log/supervisord/supervisord.log
vim /etc/supervisord.conf

 12 file=/var/run/supervisor.sock ;socket 路径,如果不设置,则supervisorctl不能用
 18 [inet_http_server]            ;开启web页面服务
 19 port=*:9999                   ;自定义端口号
 20 username=admin                ;认证用户名,非必须设置项
 21 password=123456               ;认证用户名密码,可以直接使用明码
 23 [supervisord]                 ;定义服务端进程supervisord的相关属性。必须设置项
 24 logfile=/var/log/supervisord/supervisord.log ;指定supervisord主进程的日志路径
 28 pidfile=/var/run/supervisord.pid  ;指定pid路径, 非必须设置
 48 serverurl=unix:///var/run/supervisor.sock ;supervisorctl连接supervisord,路径与12行的file一致
 140 [include]                    ;把配置信息写到多个自定义文件中
 141 files = /root/supervisor-3.1.3/supervisord/*.conf 

第四步:写*.conf配置文件(自定义一个简单的实例)

mkdir /root/supervisor-3.1.3 /supervisord/
vim /root/supervisor-3.1.3 /supervisord/app.conf

[program:app]
command=python /root/app/app.py #执行的命令,如果是程序的话,需要指定在前台运行
#以上两条必要,以下都是设置参数非必要
#directory=/root/app/               进入到这个目录中
#stdout_logfile=/root/app/app.log   成功日志
#stderr_logfile=/root/app/app.log   错误日志
#user=root                          启动elasticsearch 的用户
#numprocs=1                         Supervisor启动这个程序的多个实例,
#autostart=true                     设置为随 supervisord 启动而启动
#autorestart=true                   设置为随 supervisord 重启而重启
#startretries=3                     设置elasticsearch 重启的重试次数
#priority=1                       权重值,值越低,越早启动,越晚关闭。默认999

mkdir /root/app/
vim /root/app/app.py

from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
    return "Hello World"
if __name__=="__main__":
    app.run(port=88)

2、测试是否成功

supervisord #初始启动
supervisorctl #进入交互式
>update #更新conf配置文件
>status #查看状态

输出信息:app RUNNING pid 27905, uptime 0:00:03

curl 127.0.0.1:88

输出信息:Hello World

3、配置各程序的实例(在/root/supervisor-3.1.3 /supervisord/目录下创建)

实例1:sshd

vim sshd.conf

[program:sshd]
command=/usr/sbin/sshd  -D

实例2:httpd

vim httpd.conf

[program:httpd]
#管理守护程并使在前台保持运行
command=/usr/sbin/httpd -DFOREGROUND 
autostary=true
autorestart=true
startretries=3
stdout_logfile=/var/log/supervisord/apache.log
#loglevel=info

实例3:Nginx
nginx默认以daemon方式启动的,用supervisord来管理nginx,在配置文件里添加一行设置daemon off让nginx以非daemon方式启动。(supervisord还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序)。注意添加这一行后Nginx系统(命令)运行就在前台运行,占用终端。

vim /usr/local/nginx/conf/nginx.conf

worker_processes 2;
daemon off;
events {

vim nginx.conf

[program:nginx]
command=/usr/local/nginx/sbin/nginx
stdout_logfile=/tmp/nginx.log
stderr_logfile=/tmp/nginx.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
priority=55

实例4:Redis

vim redis.conf

[program:redis]
directory=/usr/local/src/redis-2.6.16            
command=/usr/local/src/redis-2.6.16/src/redis-server redis.conf   
stdout_logfile=/tmp/redis_access.log
stderr_logfile=/tmp/redis_error.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
priority=10

实例5:java项目(java.jar放到/date/sites/java/目录下)

vim java.conf

[program:java]
command=java -jar java.jar
directory=/data/sites/java
autostart=true
autorestart=true
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
stderr_logfile=/data/logs/java/err.log
stdout_logfile=/data/logs/java/out.log
stopsignal=INT
redirect_stderr=true

把supervisor加入开机自启动服务(CentOS7.X系统),利用/etc/rc.local

echo “/usr/bin/supervisord -c /etc/supervisord.conf” >> /etc/rc.local

/etc/rc.local是/etc/rc.d/rc.local的软连接
如果开机启动不生效,则首先需要检查下/etc/rc.d/rc.local是否具有可执行权限

4、supervisor相关命令

  • supervisord --启动
  • supervisorctl reload --修改完配置文件后重新启动
  • supervisorctl update --更新有变化的*.conf配置文件
  • supervisorctl status --查看进程状态
  • supervisorctl start 进程名 --启动XXX进程
  • supervisorctl stop 进程名 --停止XXX进程
  • supervisorctl stop all --停止全部进程

supervisorctl #进入交互式,命令与上面相同

5、报错问题

问题1:

supervisorctl reload

报错:error: <class ‘socket.error’>, [Errno 111] Connection refused: file: /usr/lib64/python2.7/socket.py line: 224

supervisorctl

报错:unix:///var/run/supervisor.sock refused connection

报错原因:supervisor没有启动

问题处理:启动supervisor

supervisord

问题2:

supervisorctl

报错:httpd BACKOFF Exited too quickly (process log may have details)

supervisor> start httpd

报错:httpd: ERROR (abnormal termination)

报错原因:
*.conf配置文件中的’command=/usr/sbin/httpd’写少了参数

问题处理:
改成:‘command=/usr/sbin/httpd -DFOREGROUND’

问题3:

supervisorctl

报错:httpd FATAL Exited too quickly (process log may have details)

supervisor> start httpd

报错:apache: ERROR (abnormal termination)

报错原因:
supervisord管理的进程必须由supervisord来启动,supervisord还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序。linux系统程序已经启动httpd进程,造成supervisor启动不了。

问题处理:
systemctl stop httpd 把系统进程停了
supervisorctl start httpd 再启动

问题4:

supervisorctl
>update
>status

报启动中:nginx STARTING #(一般报启动中都是有问题的)

>status

报错:nginx BACKOFF Exited too quickly (process log may have details)

>start nginx

报错:nginx: ERROR (abnormal termination)

>status

报错:nginx FATAL Exited too quickly (process log may have details)

报错原因:
supervisord管理的程序是非daemon程序(要在前台运行),nginx默认以daemon方式启动的。Nginx启动了,就放在后台运行了。

问题处理:
在配置文件里添加一行设置daemon off让nginx以非daemon方式启动。

vim /usr/local/nginx/conf/nginx.conf

worker_processes 2;
daemon off;
events {
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值