首页 > 解决方案 > 节点调度触发问题

问题描述

我正在我的服务器上创建一个应该每天触发的功能,但它不仅没有按预期触发,而且每次重置服务器时都会触发(昨天没有这样做)。数据只需要每天更新一次,rapidapi 是每天 100 次调用后按 api 调用付费的,所以我真的在努力让这个预定的工作正常工作。

我只在我的服务器上尝试过 node-schedule,它依赖于 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 调用。

标签: javascriptnode.jsreactjs

解决方案


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

例如,CRON 字符串0 0 * * * *是每天午夜。我会更新那个 CRON 字符串,看看它是否有助于缓解问题。


推荐阅读