每当有宝石铁路时,cron的工作都没有工作

时间:2018-01-10 17:28:27

标签: ruby-on-rails amazon-web-services cron whenever

我知道这是一个非常常见的问题,但我觉得我需要一个具体的答案来帮助找出我出错的地方......

每当gem管理cron作业时加载 - 它在开发中运行良好但是当我将应用程序加载到AWS时我似乎无法工作......

当我通过SSH连接到实例时,我可以运行crontab -l,它会列出随时随地的任务,但它似乎并没有真正执行它们。我也找不到任何日志文件来读取为什么它没有被解雇。

这是我从eb活动日志中提取的内容..

+++ GEM_ROOT=/opt/rubies/ruby-2.3.6/lib/ruby/gems/2.3.0
++ ((  0 != 0  ))
+ cd /var/app/current
+ su -c 'bundle exec whenever --update-cron'
[write] crontab file updated
+ su -c 'crontab -l'


# Begin Whenever generated tasks for: 
/var/app/current/config/schedule.rb at: 2018-01-10 06:08:24 +0000
0 * * * * /bin/bash -l -c 'cd /var/app/current && bundle exec 
bin/rails runner -e production '\''Trendi.home'\'' >> 
app/views/pages/cron.html.erb 2>&1'

# End Whenever generated tasks for: 
/var/app/current/config/schedule.rb at: 2018-01-10 06:08:24 +0000
[2018-01-10T06:08:24.705Z] INFO  [15603] - [Application update app-
a3a0-180109_230627@16/AppDeployStage1/AppDeployPostHook] : Completed 
activity. Result:
Successfully execute hooks in directory 
/opt/elasticbeanstalk/hooks/appdeploy/post.

这是我在ebextensions文件夹中的配置文件

files:
    "/opt/elasticbeanstalk/hooks/appdeploy/post/01_cron.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
       #!/usr/bin/env bash
       # Using similar syntax as the appdeploy pre hooks that is 
       managed by AWS
       set -xe

       EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container 
       -k script_dir)
       EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container 
       -k support_dir)
       EB_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container 
       -k app_deploy_dir)

       . $EB_SUPPORT_DIR/envvars
       . $EB_SCRIPT_DIR/use-app-ruby.sh

       cd $EB_DEPLOY_DIR
       su -c "bundle exec whenever --update-cron"
       su -c "crontab -l"

我的Schedule.rb

      ENV['RAILS_ENV'] = "production"
      set :output, "app/views/pages/cron.html.erb"
      every 1.hour, at: ":00"do # 1.minute 1.day 1.week 1.month 1.year 
      is also supported
       runner "Trendi.home", :environment => 'production'
      end

我的任务存储在/ lib /

   module Trendi
    def self.home
     #exectuted task code here
    end

1 个答案:

答案 0 :(得分:0)

您可以在crontab中尝试更简单的命令,并将其更改为每分钟触发一次。例如。

  

/ bin / echo“test”>> /home/username/testcron.log

这样你就可以快速排除它是否是罪魁祸首的罪魁祸首。请记住使用每个命令的完整路径。因此,在您的情况下,您可能希望更改“bundle”命令以使用完整路径。您可以使用“which”命令找到路径。

另外,你确定你在这里正确逃离了吗?

  

-e production'\''Trendi.home'\''

这不会更充足吗?

  

-e production“Trendi.home”