javascript - 节点调度触发问题
问题描述
我正在我的服务器上创建一个应该每天触发的功能,但它不仅没有按预期触发,而且每次重置服务器时都会触发(昨天没有这样做)。数据只需要每天更新一次,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 调用。
解决方案
根据https://crontab.guru,我不确定您的 CRON 格式是否正确。基于* * */23 * *
,这将对应于““每月第 23 天的每一分钟”,这听起来不像你想要的。
例如,CRON 字符串0 0 * * * *
是每天午夜。我会更新那个 CRON 字符串,看看它是否有助于缓解问题。
推荐阅读
- flutter - Flutter PageController AnimateToPage 破坏了应用程序
- c# - 有没有办法在 Blazor 中检查 url 是否有路由约束?
- python - C-FIND 研究按患者 ID 和日期
- python - 如何使用循环将元素附加到列表中?
- postgresql - 重用存储在 PostgreSQL 和 SSRS 中的参数时出错
- json - 如何在 Azure SQL 中生成 JSON 值数组
- html - 将图像向右对齐但不移动整个部分
- r - 有条件地删除数据框中的列?
- javascript - 如何将 javascript 文件/函数 API 正确导入 React.js 应用程序?
- bash - 使用 tar 压缩并验证,然后上传到 S3 并验证