2016-01-21 139 views
0

我的服务器上有一个cronjob,假设我在特定时间(例如上午8点)每天在我的rails应用程序上运行rake脚本。我使用每当宝石自动化这一点。这是它目前在cron文件上的显示方式:Cronjob每小时运行一次,但不是在特定时间运行

0 8 * * * /bin/bash -l -c 'cd /home/deploy/apps/myapp/releases/20160121092339 && RAILS_ENV=production bundle exec rake overdue_payments --silent >> /home/deploy/apps/myapp/releases/20160121092339/log/cron.log 2>&1' 

而且它不工作。但奇怪的是,如果我编辑我的cron以便每小时运行一次,它就可以正常工作了!这是我如何做它,使之运行每隔一小时:

0 * * * * /bin/bash -l -c 'cd /home/deploy/apps/myapp/releases/20160121092339 && RAILS_ENV=production bundle exec rake overdue_payments --silent >> /home/deploy/apps/myapp/releases/20160121092339/log/cron.log 2>&1' 

我已经修改了我的时区到本地时区(英国),但仍然没有工作:

enter image description here

+0

哈哈在红色的过境处! –

回答

-1

希望这个解决方案帮你

every :day, :at => (6..8).to_a.map { |x| ["#{x}:00","#{x}:30", "#{x+1}:00"] }.flatten do 
# Run rake task. 
end 

# => ["6:00", "6:30", "7:00", "7:00", "7:30", "8:00", "8:00", "8:30", "9:00"] 

调整初始范围和内部块以覆盖任何范围。它支持24小时制。

1

我们需要指定cronjob描述的时区。这是我的例子:

test_cron_job: 
    cron: "45 11 * * * Asia/Bangkok" 
    class: "Schedulers::TestCronJob" 
    queue: default 

以上cronjob将在曼谷时间上午11:45运行。顺便说一句,你可能会发现你的时区使用:

ActiveSupport::TimeZone.zones_map.values.map(&:tzinfo).map(&:identifier) 
+0

嘿,我应该这样写吗?:0 8 * * * Europe/London/bin/bash -l -c'cd/home/deploy/apps/myapp/releases/20160121092339 && RAILS_ENV = production bundle exec rake overdue_payments --silent >> /home/deploy/apps/myapp/releases/20160121092339/log/cron.log 2>&1' –

+0

'0 8 * * * Europe/London' is correct,let it with it with a测试cronjob –

+0

好吧,让我知道!因为我试过了,它不起作用:( –

0

我终于解决了它!对于时区,我只需要在它之前添加TZ。因此,对于我的情况将是:TZ =“欧洲/伦敦”。

0 8 * * * TZ="Europe/London" /bin/bash -l -c 'cd /home/deploy/apps/myapp/releases/20160121092339 && RAILS_ENV=production bundle exec rake overdue_payments --silent >> /home/deploy/apps/myapp/releases/20160121092339/log/cron.log 2>&1' 
相关问题