一段时间后,延迟的工作停止

时间:2017-01-17 10:50:08

标签: ruby-on-rails amazon-ec2 delayed-job start-stop-daemon

我的应用程序在很大程度上依赖于延迟的工作。所以我设置了两台服务器,其中一台为应用程序提供服务(m3.medium ec2实例),而另一台则运行我的延迟作业(t2.micro ec2实例)。我为延迟的作业创建了一个启动和停止脚本。这是我面临问题的地方。延迟作业运行顺利,但问题是它们会在一段时间后自动停止。所以每次他们停下来我都要再次手动启动它们。我不知道为什么他们会在处理工作的过程中停下来。

基本上我有两个问题:

  1. 我可以做些什么,以便工作不会停止,或者如果他们这样做,他们会立即/或在一段时间后自动启动?

  2. 如何让它们在实例重启/启动时自动启动?

  3. 我看过许多类似的问题,但似乎都没有帮助。

    任何建议表示赞赏。

    编辑1:

    我的延迟作业的开始/停止脚本。

    set -e
    
    # drop privs if necessary
    if [ "$(id -u)" == "0" ]; then
      exec su $(stat -c %U $(dirname $(readlink -f $0))/../config/environment.rb) -c "/bin/bash $0 $@"
      exit -1;
    fi
    
    # switch to app root
    cd $(dirname $(readlink -f $0))/..
    
    # set up config
    if [ -e "config/GEM_HOME" ]; then
      export GEM_HOME=$(cat config/GEM_HOME)
    fi
    #export GEM_HOME=/path/to/gem/home
    export RAILS_ENV=production
    
    # run delayed jobs
    exec script/delayed_job $@
    
    # following an article I have tried adding the following code restart on crash.
    
    # restarting the service 
    respawn
    
    #Give up if restart occurs 10 times in 90 seconds.
    respawn limit 10 90
    

1 个答案:

答案 0 :(得分:0)

看起来你可能有内存问题正在杀死它。您可以尝试 Monit 自动启动作业(如果已杀死

参考:http://railscasts.com/episodes/375-monit

<强>替代: 您也可以使用sidekiq而不是延迟工作