首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎样才能安排一份“每周”在Heroku的工作?

我怎样才能安排一份“每周”在Heroku的工作?
EN

Stack Overflow用户
提问于 2012-03-23 06:38:53
回答 4查看 9.4K关注 0票数 22

我有一个Rails应用程序部署在Heroku上,并且Heroku调度程序可以成功地完成日常工作。

现在我想要一个每周作业,但是调度程序外接程序不允许我选择每周一次。

任何关于我如何做到这一点的建议:

  • 我以前试过使用rufus调度器,但它给我带来了一些问题,所以这不是一个选择。有关细节,请参见这里
  • 我在想一些类似于在日常工作中检查当前情况的事情。是否有人尝试过,并有反馈或知道问题的方法?
  • 其他想法很受欢迎。
EN

回答 4

Stack Overflow用户

发布于 2013-09-02 03:26:49

仅使用shell代码的替代选项。每小时设置Heroku调度程序,并与date命令进行比较:

代码语言:javascript
复制
# setting the schedular to run hourly at *:30 is equivalent to the 
# crondate: 30 8 * * 1
if [ "$(date +%H)" = 08 ] && [ "$(date +%d)" = 01 ]; then YOUR_COMMAND ; fi 

我使用这段代码模拟本地时区的cron:

代码语言:javascript
复制
nz_hour="$(TZ=NZ date +%H)" ; nz_day="$(TZ=NZ date +%d)" ; if [ "$nz_hour" = 08 ] && [ "$nz_day" = 01 ]; then YOUR_COMMAND ; fi 
票数 10
EN

Stack Overflow用户

发布于 2013-04-17 05:46:57

这并不理想,但我已经开始添加一个RUN_IF环境变量来对通过heroku:scheduler运行的任务进行扫描,它允许我对作业进行每周和每月的日程安排。

代码语言:javascript
复制
# lib/tasks/scheduler.rake
def run?
  eval ENV.fetch('RUN_IF', 'true')
end

def scheduled
  if run?
    yield
  else
    puts "RUN_IF #{ENV['RUN_IF'].inspect} eval'd to false: aborting job."
  end
end

# lib/tasks/job.rake
task :job do
  scheduled do
    # ...
  end
end

如果一个rake任务在没有RUN_IF变量的情况下运行,它将运行。否则,作业将被中止,除非RUN_IF的值为falsey值。

代码语言:javascript
复制
$ rake job                              # => runs always
$ rake job RUN_IF='Date.today.monday?'  # => only runs on Mondays
$ rake job RUN_IF='Date.today.day == 1' # => only runs on the 1st of the month
$ rake job RUN_IF='false'               # => never runs (not practical, just demonstration)

类似于上面的其他想法,但我更喜欢将调度细节从应用程序代码中移出。

票数 9
EN

Stack Overflow用户

发布于 2017-01-04 17:55:45

正如到这里来所讨论的,并使用Rob中的上述逻辑,下面是按一周中的一天、每月一次和特定日期进行分解的bash脚本。

每周一运行一项任务:

代码语言:javascript
复制
if [ "$(date +%u)" = 1 ]; then MY_COMMAND; fi

在一个月中每第一天执行一项任务:

代码语言:javascript
复制
if [ "$(date +%d)" = 01 ]; then MY_COMMAND; fi

你也可以在每年的12月24日做一份工作:

代码语言:javascript
复制
if [ "$(date +%m)" = 12 ] && [ "$(date +%d)" = 24 ]; then MY_COMMAND; fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9835095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档