似乎无法在这里找到直接答案。
我不确定我是否应该将./myBinary作为Cron进程运行,或者我应该运行“go run myapp.go”
确保它始终在运行的有效方法是什么? 对不起,我已经习惯了Apache和Nginx。
部署Go应用程序的最佳做法是什么?我希望所有(最好)所有服务都在同一台服务器上。就像我的开发环境一样。
我读了一些使用S3的东西,但是,我真的不想使用S3。
答案 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
编辑:当你离开终端时,这个解决方案会持续进行,但是当它崩溃时不会重启它。