Mur*_* S. 3 service web-services http go server
无论是否发生错误,我都希望让Golang语言Web服务器保持正常运行.如何继续运行呢?
我们必须从2个角度检查永远在线的服务器:
首先,你不需要做任何特别的事情.如果您的处理程序发生混乱,它将不会破坏整个服务器,http服务器将从中恢复.它只会停止提供该特定请求.当然,您可以创建自己的处理程序,调用其他处理程序并在恐慌时恢复并以智能方式处理它,但这不是必需的.
这里要注意的一件事是:当maingoroutine结束时,Go应用程序结束(即:main()函数返回).因此,即使服务请求的goroutines受到保护,如果您的主要goroutine将结束(例如恐慌),您的应用程序仍将退出.
对于第二个,它并不真正与Go相关.例如,如果您使用的是Linux,只需将已编译的Go可执行文件作为服务进行安装/注册,并将其正确配置为在其退出或崩溃时重新启动.
例如,在使用systemd进行服务配置的Ubuntu中,以下最小服务描述符将满足您的愿望:
[Unit]
Description=My Always-on Service
[Service]
Restart=always
Type=simple
ExecStart=/path/to/your/app -some=params passed
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
将上述文本放在文件中,例如/etc/systemd/system/myservice.service,您可以启用并启动它:
sudo systemctl enable myservice.service
sudo systemctl start myservice.service
Run Code Online (Sandbox Code Playgroud)
第一个命令将符号链接放到正确的文件夹中,以使其在系统启动时自动启动.第二个命令现在启动它.
要验证它是否正在运行,请键入:
sudo systemctl status myservice.service
Run Code Online (Sandbox Code Playgroud)
(.service在大多数情况下,您可以省略扩展名.)
现在,只要您的应用程序崩溃,或者操作系统重新启动,您的应用程序就会自动启动/重新启动.
systemd的进一步阅读和教程:
将"run at startup"脚本从upstart转换为systemd,用于Ubuntu 16
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |