1. 背景

本次部署包含要素:

  • golang 可执行文件,叫 task_center
  • beanstalkd
  • supervisor
  • centos服务器

目的:把golang程序部署到centos服务器,golang程序里面包含beanstalkd后台服务需要启动,用supervisor来控制golang程序和beanstalkd后台服务在开机时可以自动启动

2. 操作

2.1 supervisor安装和配置

安装supervisor

yum install -y supervisor

启动supervisor

systemctl start supervisord

查看supervisor服务状态

systemctl status supervisord
[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)

查看配置文件最底层,新增自己的进程监听配置文件目录

vim /etc/supervisord.conf

进入supervisord.d文件,新建自己的配置

cd /etc/supervisord.d/
vim task_center.ini
#项目名
[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目录下

[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常用命令:

#supervisord 安装完成后有两个可用的命令行 supervisord 和 supervisorctl,命令使用解释如下:

supervisord #初始启动 Supervisord,启动、管理配置中设置的进程。
#停止某一个进程(programxxx),programxxx 为 [program:beepkg] 里配置的值,这个示例就是 beepkg。
supervisorctl stop programxxx 
supervisorctl start programxxx #启动某个进程
supervisorctl restart programxxx #重启某个进程
supervisorctl stop groupworker #重启所有属于名为 groupworker 这个分组的进程(start,restart 同理)
supervisorctl stop all #停止全部进程,注:start、restart、stop 都不会载入最新的配置文件。
supervisorctl reload #载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update #根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

# 注意:显示用 stop 停止掉的进程,用 reload 或者 update 都不会自动重启。

2.2 beanstalkd安装和开启

安装beanstalkd

yum -y install beanstalkd --enablerepo=epel

查看版本

beanstalkd -v

因为我的项目中要开启11300和11301端口,并且我打算让服务器启动后自动启动这个两个端口的服务,所以可以用supervisor来运行相关的指令来实现这个功能

同上面一样,在目录/etc/supervisord.d/下新建一个文件

vim task_centor_port.ini
[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配置

退出服务器后重新打开,用如下命令检查是否开启端口

ps -aux | grep beanstalkd

如下结果表示开启成功

连接主机...
连接主机成功
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 ~]$