supervisor
安装
1 2 3 4 5 6 7 8 9 10 11 12
| yum install -y epel-release yum install -y supervisor
# systemctl enable supervisord # 开机自启动
# systemctl start supervisord # 启动supervisord服务
# systemctl status supervisord # 查看supervisord服务状态
# ps -ef|grep supervisord # 查看是否存在supervisord进程
|
使用supervisor启动mongo
安装后,写了mongo.ini
1 2 3 4 5 6 7 8 9 10 11 12 13
| [program:mongo] ; command=numactl --interleave=all /home/xxxadmin/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongod -f /home/xxxadmin/mongodb-linux-x86_64-rhel62-3.2.7/bin/conf/mongo.conf ; 程序启动命令 autostart=false ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 startretries=1 ; 启动失败自动重试次数,默认是3 user=xxxadmin ; 用哪个用户启动进程,默认是root directory=/home/xxxadmin/mongodb-linux-x86_64-rhel62-3.2.7/bin/ ; priority=999 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/var/log/supervisor/mongo.log #当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
|
重新加载下
启动mongo
1
| [root@pfsmongo1 run]# supervisorctl start mongo
|
使用 supervisorctl 管理进程
1
| supervisorctl stop program_name
|
1
| supervisorctl start program_name
|
1
| supervisorctl restart program_name
|
- 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件:
- 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程:
- 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启:
以上命令也可以先输入supervisorctl进入交互界面,再进行具体命令
坑
把子进程一起杀掉
大多数情况下建议开启 stopasgroup=true,这样使用 supervisorctl 进行 stop 的时候,会把子进程一起杀掉,不然可能只杀父进程没杀子进程,而如果你的 program 是占用端口的服务时,下次 supervisorctl start 可能会失败。
例子 : Flask 在 DEBUG 模式下启动(使用 flask run 方式启动)时,会启动 2 个 flask 进程,stopasgroup 如果是 false,supervisorctl stop 只会杀死其中一个 flask 进程。
分号前面记得补一个空格
配置文件中,分号后面是注释,这没有问题,可是,如果要加分号,分号前面记得补一个空格。不能紧跟