supervisor的安装、项目配置以及常见报错

一、Supervisor安装与配置文件

可参考    https://blog.csdn.net/yuanqs_1992/article/details/80833898进行下载安装

 

二、Supervisor下项目的配置

1、进入/etc/supervisor/conf.d目录,这里假设你要配置的项目名称为myproject:

则创建配置文件:

touch myproject.conf

2、然后编辑配置文件:

vim myproject.conf

复制粘贴如下几行:

  

[program: myproject]
 
directory=/home/dlnu/myproject
environment=PYTHONPATH=/home/dlnu/myproject
command= python3 /home/dlnu/myproject/manage.py
autorestart=true ; 程序意外退出是否自动重启
autostart=true ; 是否自动启动
stderr_logfile=/etc/supervisor/conf.d/myproject.err.log ; 错误日志文件
stdout_logfile=/etc/supervisor/conf.d/myproject.out.log ; 输出日志文件
stopsignal=INT
startsecs=0 ; 自动重启间隔
 
 根据你项目的实际情况修改, 保存退出后重新加载一下:

supervisorctl reload

这样就大功告成!

supervisorctl restart project_name            # 重启项目的supervisor

 

 

三、常用命令

查看单个任务状态:supervisorctl status 

查看任务状态:supervisorctl status
启动守护进程:supervisord -c /etc/supervisor/supervisord.conf

启动任务:supervisorctl start 服务名

停止任务:supervisorctl stop 服务名

重启任务:supervisorctl restart 服务名
重载配置:supervisorctl reload

 

四、常见报错
下面是三种常见的通用报错:

第一类:
报错信息: unix:///tmp/supervisor.sock no such file

解决办法: 原因是supervisor默认配置会把socket文件和pid守护进程生成在/tmp/目录下,/tmp/目录是缓存目录,Linux会根据不同情况自动删除其下面的文件。

1. 创建 supervisor.sock :
sudo touch /var/run/supervisor.sock 
sudo chmod 777 /var/run/supervisor.sock 

2.  vi /etc/supervisord.conf 打开配置文件,修改如下标示的几行即可:

[unix_http_server]
;file=/tmp/supervisor.sock   ; (the path to the socket file)
file=/var/run/supervisor.sock   ; 修改为 /var/run 目录,避免被系统删除
 
[supervisord]
;logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile=/var/log/supervisor/supervisord.log ; 修改为 /var/log 目录,避免被系统删除
pidfile=/var/run/supervisord.pid ; 修改为 /var/run 目录,避免被系统删除
...
 
[supervisorctl]
; 必须和'unix_http_server'里面的设定匹配
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=unix:///var/run/supervisor.sock ; 修改为 /var/run 目录,避免被系统删除
3. 再尝试重新启动:supervisord -c /etc/supervisor/supervisord.conf()

注:若出现报错[unix:/// var/run/supervisor.sock refused connection]也可以运行此条命令

4.更新配置文件

supervisorctl update
至此就可以了,socket文件supervisor.sock和守护进程supervisord.pid两个文件放在/var/run/下面,log文件supervisord.log放在/var/log/下面。如果还不行,则重启服务器。

第二类:
报错信息: 
Error: .ini file does not include supervisorctl section

解决办法: 
又是一个权限问题的,步骤: 
1. 先确保supervisord.conf中有[supervisord],[supervisorctl]有这两个基本模块,还有[program:XXX]自己程序的配置(可以在supervisord.conf也可以在/etc/supervisor/*.ini中) 
2. 最关键的两个命令:chmod +x /usr/bin/supervisord 
chmod +x /usr/bin/supervisorctl 
chmod +x /etc/supervisord.conf主要是把把相关文件都授权了 
3. 把supervisord杀掉后再次启动supervisord

第三类:
报错信息: 
Exited too quickly (process log may have details)

如果前面的问题都解决了,但还是会遇到这个问题,恭喜你已经离胜利很近了,起码supervisord本身已经没什么问题了^_^

解决办法: 
1. 先确认[program:XXX]中自己的程序的command=<启动命令>和 directory=<运行命令的路径>没有问题,python是不是用的自己要的环境的python(比如虚拟环境的),log文件的文件夹是不是已经创建(没创建的话supervisor没权限生成log文件),以及改log文件是不是授权给所有用户了(可参考前面的解决办法chmod +x aaaaa.log) 
2. 确保用上面的配置中的command在指定路径可以直接运行不会报错,这时候一般就不会有什么问题了。这时候tail你自己的log文件一般就能看到log信息,启动失败报错的信息也会在你的log文件中,照着解决后supervisorctl reload就好了。 
3. 如果上面的命令确保可以跑,但还是没法正常运行,也看不到自己程序的报错(不然你就能根据报错解决问题了),那么恭喜,你遇到了跟我一样的情况。我的解决办法很诡异,尝试把[program:XXX]中的名字换成了一个跟启动命令不一样的另一个名字(不要太短),reload之后居然就可以跑了。。。。嗯,很不合常理,但是对我来说确实管用了。
--------------------- 
作者:Jz江城子 
来源:CSDN 
原文:https://blog.csdn.net/weixin_41762173/article/details/86678064 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值