systemd 自动重启挂掉的 golang 进程

更新日期: 2021-02-13 阅读次数: 4421 字数: 201 分类: 运维

新年,运行稳定达半年的一个 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秒内就能看到进程被自动启动了。

tags: systemd

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式