即使控制台关闭也保留 运行 golang 项目

Keep running golang project even if console closed

即使关闭控制台 (putty),如何保持 golang 项目 运行ning。我有 REST API 在 golang 中开发并托管在 AWS 上并使用 putty 连接和 运行 项目

以下命令用于安装和运行项目(myapi)

go install myapi

myapi

当我关闭 putty 时它停止工作。

您有多种选择可以让您的进程保持 运行宁。其中最简单的是使用 nohup 命令。

$ nohup myapi &

以上命令应该 运行 您的应用程序并将输出打印到名为 nohup.out 的文件中。该文件将位于您 运行 命令所在的目录中。另一种选择是使用 screen or tmux

如果您想以更适合生产的方式开始 运行您的项目,您应该考虑像 systemd 这样的服务管理器。

您可以使用 supervisord

运行 您的程序作为非特权用户并使用 setcap 实用程序授予它所需的权限。

例如,要允许绑定到低端口号(如 80)运行 将需要 运行 在可执行文件上设置一次:

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 作为初始化脚本的基础,但按如下方式更改 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

上面还添加了 --make-pidfile 为您创建 PID 文件的选项。

如果您需要以安全的方式切换到不同的用户,还有 --chuid 选项。

关于Ubuntu和RHEL/CentOS/SL 6.X最简单的方法是写一个upstart作业配置文件。只需将 exec /usr/sbin/yourprogram 放在 /etc/init/yourprogram.conf 配置文件中即可。使用新贵,无需在后台强制执行程序。不要添加传统守护进程所需的 expect forkexpect daemon。对于 upstart,如果进程不 fork 就更好了。