在Centos7使用supervisor 置顶: 推荐使用pip install supervisor安装最新版supervisor,yum install supervisor最高版本3.1.4,有很多bug
名称解释 supervisor:要安装的软件的名称。 supervisord:装好supervisor软件后,supervisord用于启动supervisor服务。 supervisorctl:用于管理supervisor配置文件中program。
Centos7 Python3.7安装最新版supervisor Centos7 通过编译安装的Python3.7 pip37 安装supervisor最新版。pyhton3支持日志中文,python3配合最新版supervisor,bug最少,体验最佳。
1 2 3 4 5 6 7 8 ➜ ~ pip37 install supervisor Looking in indexes: https://mirrors.aliyun.com/pypi/simple Collecting supervisor Downloading https://mirrors.aliyun.com/pypi/packages/ca/1f/07713b0e1e34c312450878801d496bce8b9eff5ea9e70d41ff4e299b2df5/supervisor-4.1.0-py2.py3-none-any.whl (318 kB) |████████████████████████████████| 327kB 46.5MB/s Installing collected packages: supervisor Successfully installed supervisor-4.1.0
卸载的时候,发现了Python3的supervisor路径
1 2 3 4 5 6 7 8 9 10 11 ➜ ~ pip37 uninstall supervisor Uninstalling supervisor-4.1.0: Would remove: /usr/local/python3/bin/echo_supervisord_conf /usr/local/python3/bin/pidproxy /usr/local/python3/bin/supervisorctl /usr/local/python3/bin/supervisord /usr/local/python3/lib/python3.7/site-packages/supervisor-4.1.0.dist-info/* /usr/local/python3/lib/python3.7/site-packages/supervisor/* Proceed (y/n)? y Successfully uninstalled supervisor-4.1.0
supervisor配置
1 2 3 4 5 6 7 8 9 10 11 12 ➜ ~ /usr/local/python3/bin/echo_supervisord_conf > /etc/supervisor/supervisord.conf ➜ ~ vim /etc/supervisor/supervisord.conf web界面配置 [inet_http_server] ; inet (TCP) server disabled by default port=*:9001 ; ip_address:port specifier, *:port for all iface username=clark ; default is no username (open server) password=123456 ; default is no password (open server) 指定配置文件目录 [include] files = /etc/supervisor/config.d/*.ini
启动服务
1 2 3 4 5 ➜ ~ /usr/local/python3/bin/supervisord -c /etc/supervisor/supervisord.conf ➜ ~ ps -ef|grep supervisord # 查看是否存在supervisord进程 root 16641 1 0 19:46 ? 00:00:00 /usr/local/python3/bin/python3.7 /usr/local/python3/bin/supervisord -c /etc/supervisor/supervisord.conf root 16683 16581 0 19:46 pts/1 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn super visord
配置修改后的重新载入,代替supervisorctl reload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 (scrapy_hub) ➜ gamble_monitor git:(master) /usr/local/python3/bin/supervisorctl -c /etc/supervisor/supervisord.conf update_api_run RUNNING pid 22136, uptime 0:09:04 supervisor> reload Really restart the remote supervisord process y/N? y Restarted supervisord supervisor> help default commands (type help <topic>): ===================================== add exit open reload restart start tail avail fg pid remove shutdown status update clear maintail quit reread signal stop version supervisor>
分割线:下面供参考,yum方式安装是旧版本。 使用yum安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 yum install epel-release yum install supervisor systemctl enable supervisord.service # 开机自启动 systemctl start supervisord.service # 启动supervisord服务 systemctl status supervisord.service # 查看supervisord服务状态 # 开启web服务:修改supervisord.conf ,inet_http_server节点取消注释。 vim /etc/supervisord.conf supervisorctl reload [inet_http_server] ; inet (TCP) server disabled by default port=*:9001 ; (ip_address:port specifier, *:port for all iface) username=clark ; (default is no username (open server)) password=123456 ; (default is no password (open server)) ps -ef|grep supervisord # 查看是否存在supervisord进程
应用配置 Supervisor 管理应用的进程,需要对每个应用进行配置。在 /etc/supervisord.d 中创建 helloworld.ini,每个应用对应一个配置文件即可。 下面是配置文件的示例:
1 2 3 4 5 6 7 8 9 10 11 [program:helloworld] command = dotnet HelloWorld.dll directory = /root/www/ environment = ASPNETCORE__ENVIRONMENT=Production user = root stopsignal = INT autostart = true autorestart = true startsecs = 1 stderr_logfile = /var/log/helloworld.err.log stdout_logfile = /var/log/helloworld.out.log
实际项目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 supervisor部署: cd /etc/supervisord.d/ vim product_new_merchant.ini [program:product_new_merchant] user = root directory = /root/data_hub/all_script command = /root/.virtualenvs/ProductNewMerchant/bin/python3.7 product_new_merchant.py autostart = true autorestart = true startsecs = 1 environment = MYSQL_HOST="192.168.6.160",MYSQL_DATABASE="xxxxx",MYSQL_USER_NAME="xxxxxx",MYSQL_PASSWORD="xxxxx",MYSQL_PORT=3306,REDIS_HOST="192.168.95.55",LANG="en_US.utf8",LC_ALL="en_US.UTF-8",LC_LANG="en_US.UTF-8" stdout_logfile = /var/log/product_new_merchant.log redirect_stderr=true stopsignal = INT
创建好配置文件后,重启 Supervisor
或热重启,不会重启其他子进程
1 2 3 supervisorctl reread supervisorctl update
为确保没有错误,可以正常启动,使用前文提到的查看Supervisor状态的命令查看。或者查看要管理的进程是否启动,本例中可以使用下面的命令:
1 2 3 4 ps -ef | grep HelloWorld.dll 或 ps -ef | grep dotnet
可能遇到的问题 1、我在网页上tail的时候,要不就是一直不返回,要不就是Error response Error code 410. Message: Gone.
解决方法:可能是Chrome某个插件不兼容,影响到了supervisor。使用无痕模式或者换一个Safari浏览器,解决了。
2、stderr_logfile和stdout_logfile 颠倒 3、web界面中文乱码 参考:https://www.crifan.com/upgrade_centos_supervisor_to_latest_version/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 3.1.4老版本,升级最新版 [root@web-95-55 admin]# supervisord --version 3.1.4 备份yum版本supervisor配置文件,供参考: yum remove supervisor yum remove python-meld3 pip install supervisor mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf vim /etc/supervisor/supervisord.conf 修改应用配置文件路径: ;[include] files = /etc/supervisor/config.d/*.ini mkdir /etc/supervisor/config.d cd /etc/supervisor/config.d 启动supervisor: supervisord -c /etc/supervisor/supervisord.conf
附:公司运维小哥笔记 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 yum install supervisor -y supervisor 配置说明 通过这种形式安装的supervisor,其配置文件的目录位于: /etc/supervisord.conf (主配置文件,下面会详细介绍) /etc/supervisor.d/ (默认子进程配置文件,也就是需要我们根据程序配置的地方) [unix_http_server] file=/home/supervisor/supervisor.sock ; supervisorctl使用的 socket文件的路径 ;chmod=0700 ; 默认的socket文件权限0700 ;chown=nobody:nogroup ; socket文件的拥有者 [inet_http_server] ; 提供web管理后台管理相关配置 port=0.0.0.0:9001 ; web管理后台运行的ip地址及端口,绑定外网需考虑安全性 ;username=root ; web管理后台登录用户名密码 ;password=root [supervisord] logfile=/var/log/supervisord.log ; 日志文件,默认在$CWD/supervisord.log logfile_maxbytes=50MB ; 日志限制大小,超过会生成新文件,0表示不限制 logfile_backups=10 ; 日志备份数量默认10,0表示不备份 loglevel=info ; 日志级别 pidfile=/home/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid ; pid文件 nodaemon=false ; 是否在前台启动,默认后台启动false minfds=1024 ; 可以打开文件描述符最小值 minprocs=200 ; 可以打开的进程最小值 [supervisorctl] serverurl=unix:///home/supervisor/supervisor.sock ; 通过socket连接supervisord,路径与unix_http_server->file配置的一致 [include] files = supervisor.d/*.conf ;指定了在当前目录supervisor.d文件夹下配置多个配置文件 定义supervisor管理进程配置文件 [program:sboot] ;[program:xxx] 这里的xxx是指的项目名字 directory = /opt/project ;程序所在目录 command = java -jar springboot-hello-sample.jar ;程序启动命令 autostart=true ;是否跟随supervisord的启动而启动 autorestart=true; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 stopasgroup=true;进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=true;向进程组发送kill信号,包括子进程 stdout_logfile=/var/log/sboot/supervisor.log;该程序日志输出文件,目录需要手动创建 stdout_logfile_maxbytes = 50MB;日志大小 stdout_logfile_backups = 100;备份数 service supervisord restart 直接在命令行输入supervisorctl会展示当前已配置好的项目信息。 [root@wangzh supervisor.d]# supervisorctl sboot RUNNING pid 27517, uptime 0:18:04 supervisor> 然后可以执行 start/stop/restart sboot 来简单控制项目的启停等 supervisorctl update #更新配置文件 supervisorctl reload #重新启动配置的程序 supervisorctl stop all #停止全部管理进程
参考: 1、https://www.chengxulvtu.com/supervisor-on-centos-7/
2、https://blog.csdn.net/DongGeGe214/article/details/80264811