继续运行GO服务器作为背景过程



我想保持我的Golang语言Web服务器的工作状态,无论是否发生错误。如何始终保持运行?

我们必须从2个角度检查始终在线服务器:

  1. 处理请求期间发生的错误/容忍错误
  2. 如果服务器崩溃或杀死,重新启动了服务器应用程序

首先,您不必做任何特别的事情。如果您的处理程序恐慌不会吹整个服务器,则HTTP服务器将从其中恢复。它只会停止服务于该特定请求。当然,您可以创建自己的处理程序,该操作人员调用其他处理程序并以智能方式恢复并恢复它,但这不是必需的。

在这里要注意的一件事: main goroutine结束时,GO应用程序结束(也就是说:main()函数返回(。因此,即使保护请求的goroutines也受到保护,如果您的主要goroutine将结束(例如, PANIC(,您的应用仍将退出。

在第二个方面,它并没有真正相关。例如,如果您在Linux上,只需安装/注册您的编译后的可执行文件作为服务,就可以正确配置以使其退出或崩溃。

例如,在Ubuntu中使用SystemD进行服务配置,以下最小服务描述符将满足您的愿望:

[Unit]
Description=My Always-on Service
[Service]
Restart=always
Type=simple
ExecStart=/path/to/your/app -some=params passed
[Install]
WantedBy=multi-user.target

将上述文本放入文件中,例如/etc/systemd/system/myservice.service,您可以启用并以:

开始
sudo systemctl enable myservice.service 
sudo systemctl start myservice.service 

第一个命令将符号链接放置到适当的文件夹,以使其自动启动在系统启动上。第二个命令立即开始。

要验证它是否正在运行,请输入:

sudo systemctl status myservice.service 

(您可以在大多数情况下省略.service扩展。(

现在,每当您的应用程序崩溃或重新启动操作系统时,您的应用将自动启动/重新启动。

SystemD的进一步阅读和教程:

如何使用SystemCTL管理SystemD服务和单位

SystemD Essentials:使用服务,单位和期刊

将"在启动"脚本从Upstart转换为Ubuntu 16

的SystemD

SystemD:编写和启用服务

您可以做的很少的事情。例如,

  1. 如果您担心恐慌,则只需将服务器作为背景过程运行即可。用户@终端# Go Run Server.go&
  2. 否则,对于服务器崩溃,您可以编写shell脚本以重新运行并杀死旧过程。

相关内容

  • 没有找到相关文章

最新更新