hello云胜

技术与生活

0%

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 会自动创建日志文件)

重新加载下

1
supervisorctl reload

启动mongo

1
[root@pfsmongo1 run]# supervisorctl start mongo

使用 supervisorctl 管理进程

  • 查看托管的服务状态

    1
    supervisorctl status
  • 停止某一个进程,program_name 为 [program:x] 里的 x:

1
supervisorctl stop program_name
  • 启动某个进程:
1
supervisorctl start program_name
  • 重启某个进程:
1
supervisorctl restart program_name
  • 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件:
1
supervisorctl stop all
  • 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程:
1
supervisorctl reload
  • 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启:
1
supervisorctl update

以上命令也可以先输入supervisorctl进入交互界面,再进行具体命令

把子进程一起杀掉

大多数情况下建议开启 stopasgroup=true,这样使用 supervisorctl 进行 stop 的时候,会把子进程一起杀掉,不然可能只杀父进程没杀子进程,而如果你的 program 是占用端口的服务时,下次 supervisorctl start 可能会失败。

例子 : Flask 在 DEBUG 模式下启动(使用 flask run 方式启动)时,会启动 2 个 flask 进程,stopasgroup 如果是 false,supervisorctl stop 只会杀死其中一个 flask 进程。

分号前面记得补一个空格

配置文件中,分号后面是注释,这没有问题,可是,如果要加分号,分号前面记得补一个空格。不能紧跟