节点计划触发问题

时间:2019-05-24 14:22:00

标签: javascript node.js reactjs

我在服务器上创建了一个应该每天触发的函数,但它不仅没有按预期触发,它在每次重置服务器时都会触发(昨天没有这样做)。数据只需要每天更新一次,而Rapidapi是每天进行100次调用后按api调用付费的方式,所以我真的在尝试使此计划的工作正常进行。

我只在服务器上尝试了节点计划,它具有CRON依赖性(这就是scheduleJob使用CRON格式的原因)。最初,该函数以我的计算机可以刷新服务器的最快速度触发,因此我知道scheduleJob正在阻止API调用保持不变。

schedule.scheduleJob('* * */23 * *', function () {
  console.log('Daily API call initiated.');
  unirest.get("https://unogs-unogs-v1.p.rapidapi.com/aaapi.cgi?q=get:exp:US&t=ns&st=adv&p=1")
    .header("X-RapidAPI-Host", "unogs-unogs-v1.p.rapidapi.com")
    .header("X-RapidAPI-Key", `${keys.RICHARD_UNOGS_KEY}`)
    .end(function (result) {
      console.log(result.status, result.headers);
      //console.log(result.body) to see all data
      let data = JSON.stringify(result.body)
      fs.writeFile('./movieData.json', data)
    });
})

是否有更好的方法编写此功能或达到预期效果?我只需要每天触发一次,但是我的计算机不是24/7开机。由于我仍在开发应用程序,因此我认为将服务器托管在Heroku或其他平台上不是省时的,但是我很愿意尝试解决此问题。

主要目标是告诉服务器每天运行一次,但要检查它是否在最近24小时内运行。如果尚未运行,请运行它。

由jakemingolla回答:我的CRON表达式格式错误,无法满足我的预期用途。 * * * / 23 * *具有每23天(今天是24日,索引值为+1)触发的功能,没有任何限制或其他值。这就是为什么我的函数今天不断调用的原因。我将CRON表达式更改为15 9 * * *,以便每天早晨0915小时触发我的API调用。

1 个答案:

答案 0 :(得分:1)

我不确定您基于https://crontab.guru的CRON格式是否正确。基于* * */23 * *,这将对应于““每月的第23天的每一分钟”,这听起来不像您想要的。

例如,CRON字符串0 0 * * * *是每天的午夜。我将更新该CRON字符串以查看它是否有助于缓解问题。