如何在 Rails 的 Amazon EC2 实例上 运行 长时间 运行ning 作业?

How to run a long running job on Amazon EC2 instance in Rails?

我正在使用 resque gem,并且我正在 运行 通过以下命令执行作业:

rake resque:work QUEUE='*'

但问题是:由于我与远程服务器的 SSH 连接断开,或者我关闭了正在 运行 进程 rake resque:work QUEUE='*' 的 SSH 会话 window,它停止了 运行完成任务。

我希望有一种方法可以让作业 运行 独立进行:无需通过 SSH 保持连接。有没有办法,或者我应该按照这个过程来完成我的要求?

为此,您可以 运行 在后台进行 rake 任务。有多种方法可以实现这一点。其中两个在这里:

  1. 使用守护进程,您可以 运行 在后台执行 rake 任务。这是 link for what is daemon. Here is link,如何为 rails rake 任务实现此目的。附加 & 到 rake 任务是我的首选方式。

  2. 单独实施 cron 以 运行 rake 任务。

在后台 运行 任务的另一种方法:screen。它会根据需要创建尽可能多的 shell 会话,并且它们可以从您的初始会话中分离出来。 运行:

screen(您将进入新的 shell 会话)

/path/to/your/script > /path/to/log_file

Ctrl+A, Ctrl+D (这里你 return 到初始 shell 会话,而你启动脚本的会话将继续 运行)

您可以通过tail -f /path/to/log_file查看进度,注销并重新登录。到 return 到分离会话 运行 screen -r.

如果您没有安装 screen 运行 yum install screen。不确定 Ubuntu,也许会是 apt-get install screen。 运行 man screen 了解更多详情。