我遇到了以下问题:
有两班。一班从12点开始,另一班从12点开始。
在每个班次开始时,生成一些任务(细节不重要)。
通常,这是一个可以用crontab解决的小问题但是,我的公司运行在heroku上,heroku调度程序具有以下有趣的属性:
它只能每10分钟、每小时或每天运行一次,
无法计时计划程序何时实际启动如果您的调度程序每10分钟运行一次,那么您所能期望的是它将在4:00到4:10之间运行。
调度程序可能会遇到一些错误和崩溃。发生这种情况时,调度程序将立即重新启动。例如,如果调度程序在运行时在4:00崩溃,则可能在4:01再次运行。
是否可以实现一个cronjob:
仅在12点和12点后执行一次
不需要数据库来跟踪它的执行时间?
最佳答案
我能想到的一种方法是让一些cron服务器(不在heroku上)在上午12点和下午12点运行一个脚本。
cron调用的脚本可以使用Heroku Platform API在heroku应用程序中启动one-off dyno(使用Dyno Create端点)。
此方法满足您的要求,即只在上午12点和下午12点执行一次,而不使用数据库跟踪执行时间。
这种方法的缺点是它不是一个“纯Heroku”解决方案,需要维护一些“外部”服务器来触发cron作业。
如果您不喜欢为此维护自己的cron服务器,可以使用一些云解决方案来安排脚本。例如,我想您可以免费使用AWS Lambda with Scheduled Events。
在这种情况下,您可以将lambda函数安排在每天上午12点和下午12点运行,并且lambda函数会将Heroku从dyno中一次启动。
当然,如果您愿意在heroku应用程序中添加某种形式的db,您可以轻松地创建一个“纯heroku”解决方案。
关于algorithm - 您如何编程cronjob使其在凌晨12点和下午12点之后仅运行一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50479697/