如何在Ubuntu服务器上连续运行go app

时间:2015-07-24 04:16:28

标签: linux go

似乎无法在这里找到直接答案。

我不确定我是否应该将./myBinary作为Cron进程运行,或者我应该运行“go run myapp.go”

确保它始终在运行的有效方法是什么? 对不起,我已经习惯了Apache和Nginx。

部署Go应用程序的最佳做法是什么?我希望所有(最好)所有服务都在同一台服务器上。就像我的开发环境一样。

我读了一些使用S3的东西,但是,我真的不想使用S3。

3 个答案:

答案 0 :(得分:5)

使用init进程提供的功能。您可能正在使用Systemd或Upstart运行系统。他们都有非常简单的服务描述,可以确保您的应用程序以正确的权限运行,在任何事情发生故障时重新启动,并且输出正确处理。

对于快速Upstart description look here,您的服务说明可能只是:

start on runlevel [2345]
stop on runlevel [!2345]
setuid the_username_your_app_runs_as
exec /path/to/your/app --options

对于快速Systemd description look here,您的服务可能只是:

[Unit]
Description=Your service

[Service]
User=the_username_your_app_runs_as
ExecStart=/path/to/your/app --options

[Install]
WantedBy=multi-user.target

答案 1 :(得分:0)

你可以把它放在一个有趣的循环中,例如:

#! /bin/sh
while true; do
  go run myapp.go
  sleep 2 # Just in case
done

因此,一旦应用程序因某种原因而死亡,它将再次运行。

您可以将其放在脚本中并使用以下命令在后台运行:

$ nohup ./my-script.sh >/dev/null 2>&1 &

答案 2 :(得分:0)

您可能希望在此处使用屏幕等虚拟终端实用程序。例如:

screen -S myapp # create screen with name myapp
cd ... # to your app directory
go run myapp.go # or go install and then ./myappfrom go bin dir
Ctrl-a+d # to go out of screen

如果您想返回屏幕:

screen -r myapp

编辑:当你离开终端时,这个解决方案会持续进行,但是当它崩溃时不会重启它。