在Heroku上运行Cron任务

在Heroku上运行Cron任务,cron,heroku,Cron,Heroku,我已经看到Heroku每天运行延迟的作业收取15美元/月的费用,运行cron任务收取3美元/月的费用。是否可以完全跳过它并手动运行我自己的cron任务?还是他们不知怎的发现我在运行cron任务?我不完全清楚你所说的“手动运行我自己的cron任务”是什么意思。特别是对于cron,您需要访问crontab,他们可以控制,因为他们是他们的服务器。如果你有另一种方法,那可能没问题,但请记住,在Heroku下运行时,你的应用程序没有绑定到特定的服务器,并且服务器在执行之间会发生变化 此外,除非我上次检查后

我已经看到Heroku每天运行延迟的作业收取15美元/月的费用,运行cron任务收取3美元/月的费用。是否可以完全跳过它并手动运行我自己的cron任务?还是他们不知怎的发现我在运行cron任务?

我不完全清楚你所说的“手动运行我自己的cron任务”是什么意思。特别是对于cron,您需要访问
crontab
,他们可以控制,因为他们是他们的服务器。如果你有另一种方法,那可能没问题,但请记住,在Heroku下运行时,你的应用程序没有绑定到特定的服务器,并且服务器在执行之间会发生变化

此外,除非我上次检查后他们已经更改了,否则您可以免费运行每日cron任务,但每小时的成本为3美元/月

编辑:是的,每日cron是免费的。请参阅。

如果在计算机上安装,则可以按如下方式手动运行cron任务:

$ heroku rake cron
(in /disk1/home/slugs/xxxxxx_aa515b2_6c4f/mnt)
Running cron at 2010/04/25 10:28:54...
这将执行与Heroku的每日/每小时cron插件完全相同的代码;也就是说,要使其工作,您的应用程序必须有一个带有
cron
任务的Rakefile,例如:

desc "Runs cron maintenance tasks."
task :cron do
  puts "Running cron at #{Time.now.strftime('%Y/%m/%d %H:%M:%S')}..."
  # TODO: your cron code goes here
end

现在,只需将
heroku-rake-cron
命令添加到您的任何Unix服务器上的crontab,或者如果您运行的是Linux或Mac OS X,甚至可以直接添加到您个人计算机的
crontab
,您可以根据需要为heroku应用程序安排cron作业,而不必为此收费。

是的,我已经在我的本地服务器上成功地使用了一个cron作业,它基本上是运行的

$ heroku rake <rake task>
$heroku rake

按我要求的时间间隔。我在aspen和Bambor stacks上都使用了。如果您正在运行rails应用程序并以这种方式设置调度,您还可以安装一个类似于gem的rufus调度程序。我不知道这是否出于某种原因是一种不好的做法,但这是我对我的应用程序所做的,而且它似乎工作正常

如果你想安排作业,你也可以使用这项免费服务(10个作业)来安排作业

您只需要在应用程序中设置HTTP端点来接收POST或GET上的事件通知,还可以设置一些附加参数来防止未授权的操作

因此,您在Guardiano中设置了一个作业,该作业将cal并将“分钟”留空,如果您希望操作在将来运行一次,或者将分钟数设置为您希望每X分钟运行一次操作的分钟数。这样,您只需为应用程序创建端点,当调用此EP时,您就可以执行某些操作

因此,你的应用程序可以睡眠,你不需要花费金钱和时间设置工作,并注意它们是否正常工作

如果你需要一些快速的MVP,或者你需要为不同的应用程序设置很多工作,而不是像这样的免费服务,在那里你可以外包cronjobs,这是非常好的


还有一个名为Temporaze的Heroku插件,但我不确定它是否还活着,是否还在工作

更新2020年的答案:

  • 您可以使用Heroku自己的附加组件,它允许您使用一次性dynos调度命令(这样您只需为作业的运行时间付费)。这个附加组件本身是免费的,但并不真正允许您使用cron,而是简单的频率:每天、每小时或每10分钟。此外,也不能保证您的作业将在计划的时间执行或完全执行

  • 还有其他方法可以帮助您使用cron表达式运行一次性dynos,以获得更好的灵活性,并且比Heroku Scheduler更具弹性(适当地披露,我的公司就是这样一个附加组件的创建者)

  • 您还可以使用自定义时钟进程(),这本质上意味着您有一个dyno或在其他dyno上运行的processspawn任务。这通常比使用前面提到的附加组件花费更多,但是您对流程有更细粒度的控制,并且因为您只依赖Heroku,所以它可能更稳定


  • 他们似乎在限制这一比例以防止滥用。注意。不用说,您可能不应该将其用于生产机器…:)阿伏卡德,很高兴知道。你有关于利率限制的更多信息的链接吗?也许自2010年以来时代变了,但我不明白他们为什么要限制利率。当你启动一个rake任务时,你要为此付出代价。启动rake任务1000次,您将支付1000*taskduration的费用。现在有了调度程序附加组件:它是免费的。-调度程序加载项将对你的应用程序运行任意数量的命令,可以是每10分钟、每小时或每天。加载项是免费的,但你仍然要为cron启动的一次性进程累积的dyno小时付费。@Enricoarlesso,它说“总计-每天20次或20次”。这是否意味着我每月只能免费运行20次?所以没有办法每天免费运行一次,因为它是30次?@AlexanderSupertramp,它说的是什么?@EnricoCarlesso,实际上我把它和“小Heroku调度程序”混淆了,所以“小Heroku调度程序”是完全免费的?我需要的是每天运行一次任务,时间不超过5分钟。