yum安装supervisor
yum install epel-release
yum install -y supervisor
systemctl enable supervisord # 开机自启动
systemctl start supervisord # 启动supervisord服务systemctl status supervisord # 查看supervisord服务状态
ps -ef|grep supervisord # 查看是否存在supervisord进程
yum安装会生成一个配置文件,路径/etc/supervisord.conf,修改最后一行配置文件路径,可改可不改,我比较习惯conf配置
[unix_http_server]
file=/tmp/supervisor.sock;
UNIX socket 文件,supervisorctl用XML_RPC和supervisord通信就是通过它进行,如果不设置的话,supervisorctl也就不能用了
;
chmod=0700;
socket文件的mode(权限),默认是0700
;
chown=nobody:nogroup;
socket文件的owner(属组),格式:uid:gid
;
username=user;
使用supervisorctl连接的时候,认证的用户(默认没有用户名)
;
password=123;
和上面的用户名对应的密码,可以直接使用明码,也可以使用SHA加密(默认没有密码)
;
[inet_http_server];
侦听在TCP上的socket,Web Server和远程的supervisorctl都要用到它不设置的话,默认为不开启。
;
port=127.0.0.1:9001;
这个是管理后台运行的IP和端口,侦听所有IP用:9001或*:9001。如果上面的[inet_http_server]开启了,就必须设置它。如果开放到公网,需要注意安全性
;
username=user;
同上面的[unix_http_server]用户名配置一致
;
password=123;
同上面的[unix_http_server]密码配置一致
[supervisord];
这个主要是定义supervisord这个服务端进程的一些参数的
logfile=/tmp/supervisord.log ;
这个是supervisord这个主进程的日志路径,注意和子进程的日志没有关系。默认是 $CWD/supervisord.log,$CWD是当前目录。
logfile_maxbytes=50MB;
日志文件大小,默认50MB。超过50M的时候,会生成一个新的日志文件;如果设成0,表示不限制大小。
logfile_backups=10;
日志文件保留备份数量默认10,设为0表示不备份
loglevel=info;
日志级别,默认info,其它: critical, error, warn, info, debug, trace, or blather
pidfile=/tmp/supervisord.pid ;
pid 文件
nodaemon=false;
是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024;
可以打开的文件描述符的最小值,默认 1024,低于这个值supervisor将不会启动。
minprocs=200;
可以打开的进程数的最小值,默认200,低于这个值supervisor也将不会正常启动。
;
umask=022;
进程创建文件的掩码,默认为022。
;
user=chrism;
这个参数可以设置一个非root用户,当我们以root用户启动supervisord之后。我这里面设置的这个用户,也可以对supervisord进行管理,默认情况是不设置。
;
identifier=supervisor;
这个参数是supervisord的标识符,主要是给XML_RPC用的。当你有多个supervisor的时候,而且想调用XML_RPC统一管理,就需要为每个supervisor设置不同的标识符,默认是supervisord。
;
directory=/tmp;
这个参数是当supervisord作为守护进程运行的时候,设置这个参数的话,启动supervisord进程之前,会先切换到这个目录默认不设置。
;
nocleanup=true;
这个参数当为false的时候,会在supervisord进程启动的时候,把以前子进程产生的日志文件(路径为AUTO的情况下)清除掉。有时候咱们想要看历史日志,当 然不想日志被清除了。所以可以设置为true,默认是false,有调试需求的同学可以设置为true。
;
childlogdir=/tmp;
当子进程日志路径为AUTO(系统自动分配)的时候,子进程日志文件的存放路径。
;
environment=KEY="value";
这个是用来设置环境变量的,supervisord在linux中启动默认继承了linux环境变量,在这里可以设置supervisord进程特有的其他环境变量。supervisord启动子进程时,子进程会拷贝父进程的内存空间内容。 所以设置的这些环境变量也会被子进程继承。默认为不设置。
;
strip_ansi=false;
这个选项如果设置为true,会清除子进程日志中的所有ANSI 序列。什么是ANSI序列呢?就是我们的\n,\t这些东西。默认为false。[supervisorctl];
这个主要是针对supervisorctl的一些配置
serverurl=unix:///tmp/supervisor.sock ;
通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;
serverurl=http://127.0.0.1:9001 ;
通过HTTP的方式连接supervisord
;
username=chris;
用户名,默认空
;
password=123;
密码,默认空。
;
prompt=mysupervisor;
输入用户名密码时候的提示,默认supervisor。
;
history_file=~/.sc_history;
这个参数和shell中的history类似,我们可以用上下键来查找前面执行过的命令默认是no file的。所以我们想要有这种功能,必须指定一个文件。;
[program:xx];
是被管理的进程配置参数,xx是进程的名称
;
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run;
程序启动命令;
可以带参数,如:/home/test.py -a 'hehe'有一点需要注意的是,我们的command只能是那种在终端运行的进程,不能是守护进程。这个想想也知道了,比如说command=service httpd start。httpd这个进程被linux的service管理了,我们的supervisor再去启动这个命令,这已经不是严格意义的子进程了。
;
directory=/tmp;
进程运行前,会前切换到这个目录
;
autostart=true;
在supervisord启动的时候也自动启动
;
startsecs=10;
启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒。
;
autorestart=true;
程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
这个是设置子进程挂掉后自动重启的情况,如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启。
;
exitcodes=0,2;
注意和上面的的autorestart=unexpected对应。exitcodes里面的定义的退出码是expected的。
;
stopsignal=QUIT;
进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号。默认为TERM 。当用设定的信号去干掉进程,退出码会被认为是expected。
;
stopwaitsecs=10;
这个是当我们向子进程发送stopsignal信号后,到系统返回信息给supervisord,所等待的最大时间。 超过这个时间,supervisord会向该子进程发送一个强制kill的信号。 默认为10秒。
;
startretries=3;
启动失败自动重试次数,默认是3。当超过3次后,supervisor将把此进程的状态置为FAIL
;
user=tomcat;
用哪个用户启动进程,默认是root。如果supervisord是root启动,我们在这里设置这个非root用户,可以用来管理该program。
;
priority=999;
进程启动优先级,默认999,值小的优先启动
;
redirect_stderr=true ;
把stderr重定向到stdout,默认false
;
stdout_logfile_maxbytes=20MB ;
stdout日志文件大小,默认50MB
;
stdout_logfile_backups = 20;
stdout日志文件备份数,默认是10
;
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out ;
进程的stdout的日志路径,可以指定路径,AUTO,none等三个选项。设置为none的话,将没有日志产生。设置为AUTO的话,将随机找一个地方生成日志文件,而且当supervisord重新启动的时候,以前的日志文件会被清空。当 ;
redirect_stderr=true的时候,sterr也会写进这个日志文件。需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
;
stopasgroup=false;
默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程。主要用于,supervisord管理的子进程,这个子进程本身还有子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程有可能会变成孤儿进程。所以咱们可以设置可个选项,把整个该子进程的整个进程组都干掉。 设置为true的话,一般killasgroup也会被设置为true。需要注意的是,该选项发送的是stop。默认为false。
;
killasgroup=false;
信号默认为false,不过向进程组发送的是kill信号
;
stderr_capture_maxbytes=1MB;
这个一样,和stdout_capture一样。 默认为0,关闭状态
;
stderr_events_enabled=false;
这个也是一样,默认为false
;
environment=A="1",B="2";
这个是该子进程的环境变量,和别的子进程是不共享的
;
serverurl=AUTO;
[group:thegroupname];
就是给programs(子进程)分组,划分到组里面的program。我们就不用一个一个去操作了,我们可以对组名进行统一的操作。 注意:program被划分到组里面之后,就相当于原来的配置从supervisor的配置文件里消失了。supervisor只会对组进行管理,而不再会对组里面的单个program进行管理了
;
programs=progname1,progname2 ;
组成员,用逗号分开。
;
priority=999;
优先级,相对于组和组之间说的。默认999。
;
包含其它配置文件;
当我们要管理的进程很多的时候,都写在主配置文件就不太合适了,这个时候可以把配置信息写到多个文件中,然后include过来
[include]
files = supervisord.d/*.conf;
配置文件路径,看个人喜好,我偏向以conf结尾
在配置文件路径下新建test.conf,内容如下
[program:test] #程序的名称
command=/usr/local/php/bin/php /mnt/hgfs/project/www/blog/artisan command:test #执行的命令
autostart=true #是否跟随supervisord的启动而启动
autorestart=true #程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启stopasgroup=true;
进程被杀死时,是否向这个进程组发送stop信号,包括子进程
user=root #执行进程的用户
startsecs = 1 #自动重启时间间隔(s)
numprocs=1 #进程数
redirect_stderr=true #是否重定向错误日志至输出日志
stdout_logfile=/etc/supervisord.d/logs/test.log #标准输出日志 注意:要新建logs文件夹,test.log会自动生成,但是logs文件夹需要手动建,否则会报错
校验配置文件是否有修改
supervisorctl reread #输出:test: available 说明test配置需要重载
更新配置
supervisorctl update #输出:test: added process group
【supervisor|centos7安装supervisor及supervisor web管理界面、supervisor守护进程使用】 查看supervisor状态
supervisorctl status
testRUNNINGpid 2470, uptime 0:00:01
或者查看要管理的进程是否启动,本例中可以使用下面的命令
ps -ef | grep test
root219521056 18:57 ?00:00:00 /usr/local/php/bin/php /mnt/hgfs/project/www/blog/artisan command:test
root220311860 18:57 pts/000:00:00 grep --color=auto test
重新启动配置中所有程序
supervisorctl reload
停止所有程序
supervisorctl stop all
配置supervisor web管理界面
#第一步 进入配置文件
vi /etc/supervisord.conf#第二步 把下面配置分号去掉
[inet_http_server];
inet (TCP) server disabled by default
port=0.0.0.0:9001;
(ip_address:port specifier, *:port for all iface)
username=user;
(default is no username (open server))
password=123;
(default is no password (open server))#第三步 重载配置
supervisorctl reload
浏览器访问 192.168.22.3:9001 (注:笔者是本地访问虚拟机环境)
文章图片
推荐阅读
- mysql|【centos7 + MySQL5.7 安装】centos7 安装MySQL5.7
- Linux笔记|Linux Nginx-Web
- Linux笔记|Linux Nginx
- python笔记|Python 内存管理
- python笔记|Python迭代器与生成器
- python笔记|Python 面向对象(一)
- #|数据分析与可视化(四)Pandas学习基础一(统计分析基础)
- 数据分析|机器学习多元线性回归模型(公式推导以及代码实现)
- 机器学习|机器学习(2)-朴素贝叶斯的理解和代码实现