由网络副手--寻路人于2022.07.09 20:30:00发布在Go语言 Supervisor 守护跟踪Go进程 阅读1752 评论0 喜欢1 ##背景 采用Supervisor 守护启动GO进程,实现Go进程发生crash后,进程自动重启 公司服务器采用的Centos7.6 x86 ### 安装 - 环境安装 ```` sudo yum install supervisor #启动服务 supervisord -c /etc/supervisord.conf 设置开机启动服务 systemctl enable supervisord 验证一下是否为开机启动 systemctl is-enabled supervisord ```` - 升级Go程序启动方式 & 替换为 Supervisor 老服务启动方式: ``` #重启服务 pid=$(/usr/bin/ssh workuser@$ip "ps -ef|grep ${project_name}|grep -v grep | grep -v tail |awk '{print \$2}'") if [ "$pid" ] then echo "正在kill进程" /usr/bin/ssh workuser@$ip "sudo kill -2 $pid" else echo "没有进程需要kill" fi #启动服务 /usr/bin/ssh workuser@$ip "cd ${project_path}; APP_ENV=$app_env logs_path=$log_path nohup ./${project_name} 2> ${log_path}/api_log2.out 1> ${log_path}/api_log1.out &" ``` 以上的代码发布方式,非常明显,项目进程启动后,并没有对进程守护管理,一旦项目崩了服务就直接毕业了,接下来采用 Supervisor 来管理启动进程,如何做呢? 翻译启动命令放在supervisor 配置中,实现守护方式管理 ``` sudo vim /etc/supervisord.d/api-xxxxx.ini [program:golang-api-pengyin-server] command=/home/www/rd_www/aaa/bbb environment=APP_ENV="beta",logs_path="/home/www/rd_www/logs/bbb" directory= /home/www/rd_www/bbb user=workuser autostart=true autorestart=true startsecs=3 stdout_logfile=/home/www/rd_www/logs/bbb/api_log1.out stdout_logfile_maxbytes=20MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/home/www/rd_www/logs/bbb/api_log2.out stderr_logfile_maxbytes=10MB stderr_logfile_backups=10 stderr_capture_maxbytes=10MB ``` 添加了服务管理配置文件后 执行update & reload 服务 ``` 1、更新新的配置到supervisord supervisorctl update 2、重新启动配置中的所有程序 supervisorctl reload 3、启动某个进程(program_name=你配置中写的程序名称) supervisorctl start program_name #golang-api-xxx-server 4、查看正在守候的进程 supervisorctl 5、停止某一进程 (program_name=你配置中写的程序名称) supervisorctl stop program_name 6、重启某一进程 (program_name=你配置中写的程序名称) supervisorctl restart program_name 7、停止全部进程 supervisorctl stop all ``` 做完商品配置后,我们更改 jenkins 的代码发布启动环节代码 ``` sudo supervisorctl restart ${supervisor_service_name} ``` ##完结 做完上面整个服务就完成了,可以再启动进程中,主动kill 调后,则会发现重新启动新的进程了. 赞 1 分享 赏 您可以选择一种方式赞助本站 支付宝扫码赞助 BraveDu 署名: 网络副手~寻路人