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

时间:2016-06-25 07:06:03

标签: ruby-on-rails amazon-web-services amazon-ec2 resque job-scheduling

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

rake resque:work QUEUE='*'

但问题是:当我与远程服务器的SSH连接断开连接,或者我关闭正在运行进程rake resque:work QUEUE='*'的SSH会话窗口时,它会停止运行该作业。

我希望找到一种独立运行的方式:无需通过SSH保持连接。有没有办法,或者我应该按照这个程序来完成我的要求吗?

2 个答案:

答案 0 :(得分:3)

在后台运行任务的另一种方法:$_SERVER[REQUEST_URI]。它可以根据需要创建任意数量的shell会话,并且可以从初始会话中分离出来。 运行:

screen(您将参加新的shell会话)

screen

Ctrl + A,Ctrl + D. (这里您将返回初始shell会话,而您启动脚本的会话将继续运行)

您可以按/path/to/your/script > /path/to/log_file观看进度,注销并重新登录。要返回分离的会话,请运行tail -f /path/to/log_file

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

答案 1 :(得分:1)

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

  1. 使用守护进程可以在后台运行rake任务。这是守护进程的link。这是link,如何实现rails rake任务。将&附加到rake任务是我的首选方式。

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