1, 安装
pip3 install git+https://github.com/Supervisor/supervisor
运行echo_supervisord_conf > /etc/supervisor/supervisord.conf来产生设置,未避免产生非root用户的权限错误,将/etc/supervisor/supervisord.conf内[unix_http_server]这项改为 (修改chmod):
[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
chmod=0766 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
添加末尾的[include]
出现的错误一:
Error: Another program is already listening on a port that one of our HTTP servers is configured to
解决方法:
find / -name supervisor.sock
unlink /name/supervisor.sock
2, 服务启动
sudo supervisord -c /etc/supervisor/supervisord.conf (先启动supervisord)
ps -ef | grep supervisord (检查服务状态)
1. 启动
supervisord # 使用默认的配置文件启动, 即/etc/supervisord.conf
supervisord -c /etc/supervisord.conf # 指定配置文件启动, 推荐使用该方法
supervisord -u user # 使用 user 用户启动supervisord
2. 查看supervisord是否在运行
ps -ef | grep supervisord
3. 进程的控制
supervisord启动成功后,可以通过supervisorctl客户端控制进程,启动\停止\重启. 运行supervisorctl命令,不加参数,
会进入supervisor客户端的交互终端, 并会列出当前所管理的所有进程.
进入supervisorctl客户端后有哪些操作命令, 可直接输入help来查看每一项
再使用help 命令 可查看该命令的详细使用; 比如 help start
4, 开机自启
systemctl enable supervisord.service
3, 配置自己项目super文件
[program:qrcode]
directory=/home/ubuntu/projects/QrCode # 程序的启动目录
command=/home/ubuntu/projects/QrCode/py3_env/bin/gunicorn -c gunicorn.py application:app # 启动命令,可以看出与手动在命令行启动的命令是一样的,注意这里 gunicorn 目录是 python 环境下安装的 gunicorn 路径
autostart=true # 在 supervisord 启动的时候也自动启动
autorestart=true # 启动 5 秒后没有异常退出,就当作已经正常启动了
stderr_logfile=/home/ubuntu/projects/QrCode/logs/test_stderr.log # 自定义日志目录文件夹
stdout_logfile=/home/ubuntu/projects/QrCode/logs/test_stdout.log # 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
###########################################################
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = hadoop ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
4,注意事项
如果修改了 /etc/supervisord.conf ,需要执行 supervisorctl reload 来重新加载配置文件,否则不会生效。。。
可以让supervisord service 随机启动
systemctl enable supervisord
systemctl restart supervisord