golang 平滑重启如何实现呢

golang 如何实现平滑重启呢, 我本地目前写了个shell脚本, 直接执行, 比一个一个命令敲实现稍微好点, 但是感觉还是不太好, 如果一个程序执行到了一半, 重启了, 那么内容丢失, 会造成脏数据, 我的shell内容如下:

!/bin/bash

cd /data/code/coupon;
killall coupon_go;
mv coupon coupon_go;
nohup /data/code/coupon/coupon_go >> /data/code/coupon/error.log &

问题: 如何实践平滑重启呢

阅读 2.6k
2 个回答

用kill -TERM,然后go程序中监听 SIGTERM信号,在退出前做一些处理,数据该保存的保存。

监听退出信息,当发生退出时保存现场:

c := make(chan os.Signal)
    // 监听信号
    signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGUSR1, syscall.SIGUSR2)

    go func() {
        for s := range c {
            switch s {
            case syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM:
                exitFunc()
                time.Sleep(time.Second)
                os.Exit(0)
            case syscall.SIGUSR1:
            case syscall.SIGUSR2:
            default:
            }
        }
    }()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题