supervisor+go+beanstalkd环境配置和部署 1. 背景 本次部署包含要素:
golang 可执行文件,叫 task_center beanstalkd supervisor centos服务器 目的:把golang程序部署到centos服务器,golang程序里面包含beanstalkd后台服务需要启动,用supervisor来控制golang程序和beanstalkd后台服务在开机时可以自动启动
1.1 官网 Supervisor 官网
1.2 介绍 Supervisor 是一个进程控制系统。 它是一个 C/S 系统 (注意:其提供 WEB 接口给用户查询和控制)。 它允许用户去监控和控制在类 UNIX 系统的进程。 它的目标与 launchd、daemontools 和 runit 有些相似。 但是与它们不一样的是、它不是作为 init (进程号 pid 是 1) 运行。 它是被用来控制进程、并且它在启动的时候和一般程序并无二致。 那么通俗点,它的作用是什么? 你的 Nginx,Tomcat,memcache,Redis… 会崩么? 那你自己写的服务器监测脚本呢? 好吧、不要再纠结了、交给 Supervisor 吧! 它会帮你维护这些、即使它们不小心崩了、Supervisor 会帮你看住它们、维护它们。
2. 操作 2.1 supervisor安装和配置 安装supervisor
1 yum install -y supervisor
启动supervisor
1 systemctl start supervisord
查看supervisor服务状态
1 systemctl status supervisord
1 2 3 4 5 [root@server06 centos]# systemctl status supervisord ● supervisord.service - Process Monitoring and Control Daemon Loaded : loaded (/usr/ lib/systemd/system/supervisord.service ; enabled; vendor preset : disabled) Active : inactive (dead) since 二 2022 -04 -26 15 :30 :24 CST ; 2 weeks 3 days ago Main PID : 4643 (code=exited, status=0 /SUCCESS )
查看配置文件最底层,新增自己的进程监听配置文件目录
1 vim /etc/supervisord.conf
进入supervisord.d文件,新建自己的配置
1 2 cd /etc/supervisord.d / vim task_center.ini
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 #项目名 [program :task_center] #脚本目录 directory=/home/ centos/task_center #脚本执行命令 command=/home/ centos/task_center/task_center #脚本运行的用户身份 user = root #supervisor启动的时候是否随着同时启动,默认True autostart=true #当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况, #有三个选项,false ,unexpected和true 。如果为false 的时候,无论什么情况下,都不会被重新启动, #如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的时候 autorestart=true #这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1 startsecs=1 #当进程启动失败后,最大尝试启动的次数,默认为3 次 startretries=3 #这个是当我们向子进程发送stopsignal信号后,到系统返回信息给supervisord所等待的最大时间 #默认为10 秒 stopwaitsecs=10 #把stderr重定向到stdout,默认 false redirect_stderr = true #日志输出 stdout_logfile=/home/ centos/task_center/log/comm.logs #stdout日志文件大小,默认 50MB stdout_logfile_maxbytes = 50M #stdout日志文件备份数 stdout_logfile_backups = 10 stderr_logfile=/home/ centos/task_center/log/err.log #stderr日志文件大小,默认 50MB stderr_logfile_maxbytes = 50M #stderr日志文件备份数 stderr_logfile_backups = 10
把golang执行文件 task_center 放在/home/centos/task_center
目录下
1 2 3 4 5 6 7 8 [centos@server06 task_center]$ pwd /home/centos/task_center [centos@server06 task_center]$ ll 总用量 18952 drwxrwxr-x 2 centos centos 4096 5 月 12 17 :54 conf drwxrwxr-x 2 centos centos 4096 5 月 12 22 :28 log -rwxrwxr-x 1 centos centos 19391610 5 月 12 17 :41 task_center drwxrwxr-x 2 centos centos 4096 5 月 12 17 :31 temp
然后执行supervisorctl update
更新supervisor配置
supervisor常用命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #supervisord 安装完成后有两个可用的命令行 supervisord 和 supervisorctl,命令使用解释如下: supervisord #初始启动 Supervisord ,启动、管理配置中设置的进程。 #停止某一个进程(programxxx),programxxx 为 [program :beepkg] 里配置的值,这个示例就是 beepkg。 supervisorctl status #查看程序运行状态 supervisorctl stop programxxx #停止指定应用 supervisorctl stop all #停止所有应用 supervisorctl start programxxx #启动某个进程 supervisorctl start all #启动所有应用 supervisorctl restart programxxx #重启某个进程 supervisorctl restart all #重启所有应用 supervisorctl stop groupworker #重启所有属于名为 groupworker 这个分组的进程(start,restart 同理) supervisorctl stop all #停止全部进程,注:start、restart、stop 都不会载入最新的配置文件。 supervisorctl reload #载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。 supervisorctl update #根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。 sudo supervisorctl update #修改服务配置文件后执行命令 supervisorctl tail test stdout #错误信息查看 # 注意:显示用 stop 停止掉的进程,用 reload 或者 update 都不会自动重启。
update 更新新的配置到supervisord(不会重启原来已运行的程序)
reload,载入所有配置文件,并按新的配置启动、管理所有进程(会重启原来已运行的程序)
2.2 beanstalkd安装和开启 安装beanstalkd
1 yum -y install beanstalkd --enablerepo=epel
查看版本
因为我的项目中要开启11300和11301端口,并且我打算让服务器启动后自动启动这个两个端口的服务,所以可以用supervisor来运行相关的指令来实现这个功能
同上面一样,在目录/etc/supervisord.d/
下新建一个文件
1 vim task_centor_port.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [program :task_center_port] # 同时开启 11300 和 11301 端口服务 command=/bin/ bash -c "beanstalkd -l 172.18.92.148 -p 11300 & beanstalkd -l 172.18.92.148 -p 11301 &" directory=/home/ centos/task_center autostart=true startsecs=5 startretries=3 autorestart=true stopwaitsecs=10 user=root redirect_stderr=true stdout_logfile=/home/ centos/task_center/log/comm_port.log stdout_logfile_maxbytes=100MB stdout_logfile_backups=5 stderr_logfile=/home/ centos/task_center/log/err_port.log stderr_logfile_maxbytes=100MB stderr_logfile_backups=5
然后执行supervisorctl update
更新supervisor配置
退出服务器后重新打开,用如下命令检查是否开启端口
1 ps -aux | grep beanstalkd
如下结果表示开启成功
1 2 3 4 5 6 7 8 9 10 11 连接主机... 连接主机成功 Last login : Fri May 13 18 :35 :43 2022 from 183.56 .160 .125 Welcome to Alibaba Cloud Elastic Compute Service ![centos@server06 ~]$ ps -aux | grep beanstalkd centos 12953 0.0 0.0 112720 988 pts/0 S+ 18 :35 0 :00 grep --color=auto beanstalkd root 17135 0.0 0.0 8748 664 ? S 5 月12 0 :02 beanstalkd -l 172.18 .92 .148 -p 11300 root 17136 0.0 0.0 8748 660 ? S 5 月12 0 :02 beanstalkd -l 172.18 .92 .148 -p 11301 [centos@server06 ~]$
2.3 修改配置文件发布supervisorctl管理界面 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))
参考:
https://www.sulvblog.cn supervisor 安装与使用 supervisor 安装配置使用