繁体   English   中英

只要有宝石导轨,cron工作就无法正常工作

[英]cron jobs not working aws whenever gem rails

我知道这是一个非常普遍的问题,但是我觉得我需要一个特定的答案来帮助找出我要去哪里。

每当gem来管理cron作业时都加载-在开发中工作正常,但是当我将应用加载到AWS时,它似乎无法正常工作...

当我通过SSH进入实例时,我可以运行crontab -l,它列出了whenever任务,但实际上似乎没有执行它们。 我也找不到任何日志文件来读取为什么它不触发。

这是我从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

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

/ bin / echo“测试” >> / home /用户名/testcron.log

这样,您就可以迅速排除罪魁祸首是否是cronjob。 请记住使用每个命令的完整路径。 因此,在您的情况下,您可能需要更改“捆绑”命令以使用完整路径。 您可以使用“哪个”命令找到路径。

另外,您确定您正确地在这里逃跑了吗?

-e生产'\\'Trendi.home'\\''

这还不够吗?

-e生产“ Trendi.home”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM