使用systemd(和无尽的)去应用程序优雅重启

时间:2015-07-29 23:05:47

标签: go systemd

我想为Go应用程序进行真正优雅的重启,同时仍然能够使用systemd控制它。我在应用中使用了endless。代码很简单(endless.ListenAndServe(":80", nil)),对于systemd配置文件,到目前为止我设法像这样(goapp.service):

[Unit]
Description=Go Application
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=root
Group=root
WorkingDirectory=/root/go/src/myproject
ExecStart=/root/go/src/myproject/goapp
KillSignal=SIGHUP
Restart=on-failure

然后我只使用systemctl start goapp启动应用程序,一切都很好,但是当我同时向应用程序发出大量请求时发出systemctl restart goapp时,重启命令似乎挂起我的终端(而不是杀死/分叉进程),直到它没有请求。当然,当没有请求时,服务会成功重启。

我正在使用这个简单的代码进行测试:

package main   

import "net/http"
import "github.com/fvbock/endless"

func handler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello"))
}

func main() {
    http.HandleFunc("/", handler)
    endless.ListenAndServe(":80", nil)
}

有人可以帮忙吗?我做错了什么?

0 个答案:

没有答案