即使关闭console(putty),如何让golang项目继续运行。我在golang中开发了REST API,并在AWS上托管并使用putty连接并运行项目
以下命令用于安装和运行项目(myapi)
go install myapi
myapi
当我关闭腻子时,它停止工作。
答案 0 :(得分:10)
您有许多选项可以让您的流程继续运行。最简单的方法是使用nohup
命令。
$ nohup myapi &
上面的命令应该运行你的应用程序并将输出打印到名为nohup.out的文件中。该文件将位于运行该命令的目录中。另一种选择是使用screen或tmux。
如果您想以更加生产的方式开始运行项目,您应该考虑像systemd这样的服务管理器。
答案 1 :(得分:4)
您可以使用supervisord
之类的内容以非特权用户身份运行您的程序,并使用setcap实用程序为其授予所需权限。
例如,要允许绑定到低端口号(如80),需要在可执行文件上运行setcap一次:
sudo setcap 'cap_net_bind_service=+ep' /opt/yourGoBinary
您可能需要安装setcap:sudo aptitude install libcap2-bin
另外
Debian附带了一个名为start-stop-daemon
的工具,它是在init.d
脚本中启动守护进程的标准方法。如果程序不自行执行,它还可以将该过程置于后台。看看--background
选项。
使用/etc/init.d/skeleton
作为init脚本的基础,但更改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
配置文件即可。使用暴发户,无需在后台强制执行该程序。不要在传统守护进程中添加所需的expect fork
或expect daemon
。使用upstart,如果进程不分叉则更好。