systemd 自动重启挂掉的 golang 进程

文章目录

    新年,运行稳定达半年的一个 golang 进程挂掉了。

    报错日志显示:

    panic: Get “https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxx”: net/http: TLS handshake timeout

    估计是春节期间微信服务器的压力太大吧。

    没有太在意,手动重启了服务。

    但是,半天后,又收到短信报警,服务还是挂了,还是同样的超时错误。

    无法忍受了,决定配置上 systemd 自动重启挂掉进程。

    配置示例

    [Unit]
    Description=Golang Tools
    
    [Service]
    User=xxx
    Group=xxx
    Type=simple
    Restart=always
    RestartSec=20
    StartLimitInterval=0
    Nice=10
    WorkingDirectory=/home/xxx/go/
    ExecStart=/usr/bin/nohup /home/xxx/go/go_tool
    StandardOutput=null
    TimeoutStartSec=30
    
    [Install]
    RequiredBy=multi-user.target
    

    关键参数:

    Restart=always   进程挂了就重启
    RestartSec=20    20秒检查一次
    StartLimitInterval=0    无限次重启,忽略失败次数
    

    配置生效

    sudo systemctl daemon-reload
    sudo systemctl start go_tools
    

    然后我手动 kill 掉进程,20秒内就能看到进程被自动启动了。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式