使用docker-compose 构建go项目,实现优雅重启或者停止(二) – 离线job

使用 docker-compose + supervisor 管理go的job
supervisor 的配置文件示例如下:

[program:xxx]
process_name=%(program_name)s_%(process_num)02d
command=gocommand xxx --config xxx.yml
directory=/var/www/program #工作目录,定义工作目录是为了日志路径可以保证在项目目录下
autostart=true #自动启动
autorestart=true #自动重启
numprocs=1 #只有一个进程
stdout_logfile=/var/log/xxx.log #标准输出日志文件
stderr_logfile=/var/log/xxx_stderr.log #错误输入日志文件
redirect_stderr=true #重定向错误日志
stdout_logfile_maxbytes = 50MB #日志文件大小
stdout_logfile_backups = 20 #日志文件保留数量
stopsignal=INT #以SIGINT (信号2)通知进程结束
stopwaitsecs=6000 #等待进程结束时间,超过这个时间则强制杀死进程,默认10s

go 中代码如下:

quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, os.Kill)
<-quit
fmt.Println("监控到退出信号")

最后是docker-compose 通知 supervisor 重启,

supervisor:
    restart: always
    stop_grace_period: 6000s #等待时间,超过这个时间则强制杀死容器,默认10秒
    build:
      context: ./supervisor
    volumes:
      - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}
    networks:
      - backend
此条目发表在go分类目录。将固定链接加入收藏夹。