supervisor安装和自启动的一些问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了supervisor安装和自启动的一些问题相关的知识,希望对你有一定的参考价值。
参考技术A 1、网上说: pip install supervisor出现问题: bash:pip:command not found
需要安装pip: sudo easy_install pip
出现问题: sudo: easy_install: command not found
需要执行: sudo apt-get install python-setuptools
然后就可以: pip install supervisor
2、在supervisor默认配置中,其启动的sock等都会放到tmp目录,而tmp目录会自动清理(比如重启主机)导致无法使用supervisorctl命令;
修改supervisor.conf文件,修改到/var/run/及/var/log/目录
file=/var/run/supervisor.sock
serverurl=unix:///var/run/supervisor.sock ; 等等
*注意:修改supervisor.conf文件后,要执行 supervisorctl reload ,重新加载配置文件;
*注意:supervisor好像需要root安装;
3、错误:Supervisorctl error: unix:///var/run/supervisord.sock refused connection?
说明需要开启supervisord。
echo_supervisord_conf > /etc/supervisord.conf //如果已经修改了supervisor.conf,这句就不要执行了
sudo supervisord -c /etc/supervisord.conf
sudo supervisorctl status
4、supervisor自启动
其实自启动,也就是在主机开启的时候,执行了 sudo supervisord -c /etc/supervisord.conf ;
创建 /usr/lib/systemd/system/supervisord.service 文件;
写入:
# dservice for systemd (CentOS 7.0+)
# by ET-CS ( https://github.com/ET-CS )
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
*注意:我的supervisord的目录是/usr/local/bin/supervisord,需要把上边目录修改;
将文件拷贝至:“/usr/lib/systemd/system/supervisord.service”
systemctl enable supervisord
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting
解决方法:
find / -name supervisor.sock
unlink /name/supervisor.sock
unix:///var/run/supervisor.sock no such file
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
sudo service supervisor restart
原博客地址: http://www.cnblogs.com/94cool/p/5952219.html
Supervisor初体验
学习Supervisor
小白必看的supervisor教程,帮助认识supervisor,再也不会不知所措
Ubuntu下载
下载命令
sudo apt install supervisord
- 安装成功后,supervisor会默认启动
- 通过这种方式安装的supervisor会默认安装在
/etc/bin
,并且会自动加入到系统服务,随着系统的启动而启动;那么通过系统服务启动supervisor的命令是systemctl start supervisor
,查看supervisor状态的命令是systemctl status supervisor
- 安装成功之后,会在
/etc/supervisor
中生成supervisor.conf
主配置文件;另一种情况是手动生成的配置文件,命令是echo_supervisord_conf > supervisord.conf
命令,这种方式生成的配置信息比较全面
配置文件介绍
; supervisor config file
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
minfds=50000
minprocs=50000
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
[include]
files = /etc/supervisor/conf.d/*.conf
supervisor.conf中的语法格式
- 以 [ ]标示起来的部分是配置参数的分组,[]里的单词可以理解为这一部分的功能概述 - ;标示注释 - 比较值得注意 [include] files = /etc/supervisor/conf.d/*.conf 这部分的功能是,创建了一个conf.d的文件夹,该文件夹下会有多个.conf的配置文件,用来区分和管理多个进程,当然这里你也可以修改未见的后缀为ini,supervisor会自动的去查找这个文件下的配置文件
使用
首先将supervisor.conf中
[include]
配置存放文件的conf.d
文件夹,需要清楚的是,不是非的使用这个名字的文件夹,只要按照files指定的路径能够找得到每个配置文件即可在
conf.d
下创建你的配置文件以.conf
结尾,这里同理跟files中的配置对上即可常用配置信息,具体请根据实际需求来定,下面只是举例
[program:LotteryCeleryWorker] ;定义你的进程的名字,一定要具有识别性,不要与其他的进程重名 directory= /home/ubuntu/var/service_lottery_server/lotterydraw ; 命令执行的目录,要写绝对路径 command= /home/ubuntu/venv/bin/celery -A mycelery.main worker --loglevel=info ; 运行程序的命令的绝对路径,常用通过pip安装的的python命令就存在环境的bin目录下;后边如果需要跟启动的项目的文件,也是也写绝对路径 autorestart=true ; 程序意外退出是否自动重启 autostart=true ; 是否自动启动 stderr_logfile=/var/log/lottery.err.log ; 错误日志文件 stdout_logfile=/var/log/lottery.out.log ; 输出日志文件 environment=PYTHONPATH='LotteryCeleryBeat/python3.6/site-packages/' ; 进程环境变量,用的不多,因为在command部分可以指定到具体的命令 user=root ; 进程执行的用户身份 priority=17 ;优先级,值越高,最后启动,最先被关闭,默认值999 startsecs=10 ;启动延时执行,默认1秒 stopsignal=INT ;中断信号
详细参数说明
;*为必须填写项 ;*[program:应用名称] [program:cat] ;*命令路径,如果使用python启动的程序应该为 python /home/test.py, ;不建议放入/home/user/, 对于非user用户一般情况下是不能访问 command=/bin/cat ;当numprocs为1时,process_name=%(program_name)s ;当numprocs>=2时,%(program_name)s_%(process_num)02d process_name=%(program_name)s ;进程数量 numprocs=1 ;执行目录,若有/home/supervisor_test/test1.py ;将directory设置成/home/supervisor_test ;则command只需设置成python test1.py ;否则command必须设置成绝对执行目录 directory=/tmp ;掩码:--- -w- -w-, 转换后rwx r-x w-x umask=022 ;优先级,值越高,最后启动,最先被关闭,默认值999 priority=999 ;如果是true,当supervisor启动时,程序将会自动启动 autostart=true ;*自动重启 autorestart=true ;启动延时执行,默认1秒 startsecs=10 ;启动尝试次数,默认3次 startretries=3 ;当退出码是0,2时,执行重启,默认值0,2 exitcodes=0,2 ;停止信号,默认TERM ;中断:INT(类似于Ctrl+C)(kill -INT pid),退出后会将写文件或日志(推荐) ;终止:TERM(kill -TERM pid) ;挂起:HUP(kill -HUP pid),注意与Ctrl+Z/kill -stop pid不同 ;从容停止:QUIT(kill -QUIT pid) ;KILL, USR1, USR2其他见命令(kill -l),说明1 stopsignal=TERM stopwaitsecs=10 ;*以root用户执行 user=root ;重定向 redirect_stderr=false stdout_logfile=/a/path stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/a/path stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB ;环境变量设置 environment=A="1",B="2" serverurl=AUTO
常用命令
常用命令汇总
supervisorctl status //查看所有进程的状态 supervisorctl stop program中设置的项目名称 //停止单个进程 supervisorctl start program中设置的项目名称 //启动当个进程表 supervisorctl restart program中设置的项目名称 //重启单个进程 supervisorctl update //配置文件修改后使用该命令加载新的配置 supervisorctl reload //重新启动配置中的所有程序 supervisorctl reread //检查配置信息是否有逻辑错误
如果这是第一次运行supervisor,可以直接使用
supervisord -c /etc/supervisord.conf
来启动如果你的机器中已经运行了supervisor,你又新添加了自己的项目
- 第一步,检查配置信息:使用
supervisorctl reread
检查你的配置信息是否有明显的逻辑错误,这里supervisor会对你的配置信息进行检查,确保你的配置命令可行,你配置的文件路径是否存在;检查完毕后他会提示你具体的错误信息或者配置信息是否有所变化 - 第二步,加载配置信息:使用
supervisorctl update
加载配置信息,当你的配置文件修改之后,要想生效,也要执行这条命令 - 第三步,启动你的进程:这里请一定要注意,千万不要千万不要轻易使用
supervisorctl reload
,因为这条命令是。重新加载所有的supervisor里的配置进程,除非你对supervisor管理的进程了如指掌;个人建议使用supervisorctl start program中设置的项目名称
的方式启动你的新进程
- 第一步,检查配置信息:使用
对于单个进程的管理
supervisorctl stop program中设置的项目名称 //停止单个进程 supervisorctl start program中设置的项目名称 //启动当个进程表 supervisorctl restart program中设置的项目名称 //重启单个进程
多个进程的管理
supervisorctl status //查看所有的进程状态 supervisorctl start all //启动所有的进程 supervisorctl stop all //停止所有的进程 supervisorctl reload //重新启动配置中的所有程序
通过supervisor的管理
supervisord -c supervisor.conf //通过配置文件启动supervisor supervisord shutdown //停止supervisor的运行 supervisorctl -c supervisor.conf status //查看状态 supervisorctl -c supervisor.conf reload //重新载入配置文件 supervisorctl -c supervisor.conf start [all]|[x] //启动所有/指定的程序进程 supervisorctl -c supervisor.conf stop [all]|[x] //关闭所有/指定的程序进程
以上是关于supervisor安装和自启动的一些问题的主要内容,如果未能解决你的问题,请参考以下文章