我的服务器上有一个cronjob,它假设每天在我的rails应用程序上运行一个rake脚本(例如,上午8点)。每当gem自动化时我都会使用它。这就是当前在cron文件中的显示方式:
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'
我已将我的时区修改为当地时区(英国),但仍无效:
答案 0 :(得分: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)
答案 1 :(得分:0)
我终于解决了!对于时区,我只需要在它之前添加TZ。所以对我来说,它将是:TZ =“Europe / London”。
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'
答案 2 :(得分:-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小时。