学习Supervisor
小白必看的supervisor教程,帮助认识supervisor,再也不会不知所措
Ubuntu下载
下载命令
sudo apt-get install supervisor
- 安装成功后,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] //关闭所有/指定的程序进程