Amazon web services 即使控制台关闭,也要继续运行golang项目
如何在控制台(putty)关闭的情况下保持golang项目运行。我在golang开发了RESTAPI,托管在AWS上,并使用putty连接和运行项目 以下命令用于安装和运行项目(myapi)Amazon web services 即使控制台关闭,也要继续运行golang项目,amazon-web-services,go,amazon-ec2,putty,Amazon Web Services,Go,Amazon Ec2,Putty,如何在控制台(putty)关闭的情况下保持golang项目运行。我在golang开发了RESTAPI,托管在AWS上,并使用putty连接和运行项目 以下命令用于安装和运行项目(myapi) 当我关闭putty时,它会停止工作。您有许多选项来保持流程运行。最简单的方法是使用nohup命令 $nohup myapi& 上面的命令应该运行应用程序并将输出打印到名为nohup.out的文件中。此文件将位于运行命令的目录中。另一种选择是使用或 如果您想以更适合生产的方式开始运行项目,您应该向服务经理咨询
当我关闭putty时,它会停止工作。您有许多选项来保持流程运行。最简单的方法是使用
nohup
命令
$nohup myapi&
上面的命令应该运行应用程序并将输出打印到名为nohup.out的文件中。此文件将位于运行命令的目录中。另一种选择是使用或
如果您想以更适合生产的方式开始运行项目,您应该向服务经理咨询。您可以使用 以非特权用户身份运行您的程序,并使用该实用程序授予它所需的权限 例如,要允许绑定到低端口号(如80),运行需要在可执行文件上运行一次setcap:
sudo setcap'cap\u net\u bind\u service=+ep'/opt/yourGoBinary
您可能需要安装setcap:sudo aptitude install libcap2 bin
或者
Debian附带了一个名为start-stop-daemon
的工具,这是在init.d
脚本中启动守护程序的标准方法。如果程序不能自己完成,它还可以将进程置于后台。查看--background
选项
使用/etc/init.d/skeleton
作为初始化脚本的基础,但将do_start()
函数更改如下:
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \
--background --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \
--background --exec $DAEMON -- $DAEMON_ARGS \
|| return 2
上面还添加了创建PID文件的--make pidfile
选项
如果您需要以安全的方式切换到其他用户,还可以使用--chuid
选项
在Ubuntu和RHEL/CentOS/SL 6.X上,最简单的方法是编写一个
upstart
作业配置文件。只需将exec/usr/sbin/yourprogram放入/etc/init/yourprogram.conf
配置文件。对于upstart,不需要在后台强制执行程序。不要添加传统守护进程所需的expect fork
或expect daemon
。对于upstart,如果流程不分叉,则效果更好。您需要考虑将流程作为服务运行。它不会特定于AWS。我不确定用围棋做这件事的最佳方式,但你可以看看这个:围棋也不是特别的。它只适用于操作系统-例如,在Linux中,它可以像nohupmyapi&
一样简单,也可以像使用init.d、supervisord、runit等进行全服务管理一样复杂。您可以:不朽的myapi
屏幕似乎适合我,但不确定它是否有任何缺点或我应该注意的事情,你能分享一下你的想法吗?屏幕技术上是可行的,但是如果你想要同样简单的东西,nohup是一个更好的选择。答案是正确的,但如果您想要生产级,您需要一个真正的服务管理器,如initd/supervisord/systemd/upstart/runit/etc。使用screen/tmux/nohup的缺点是它们不容易为某些用例配置。运行软件时,与开发软件时相比,您有不同的优先级。例如,我的日志在哪里出于安全原因,我如何限制程序在服务器/网络上的访问如果服务器重新启动,如何重新启动进程如何对应用程序进行打包以使其易于部署如何监视我的应用程序?init系统(systemd,initd,…)为您提供了执行上述所有操作以及更多操作的工具。管理软件越多,这些用途就越清晰
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \
--background --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \
--background --exec $DAEMON -- $DAEMON_ARGS \
|| return 2