2016-01-21 146 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' 
相關問題