我在我的服务器上创建了一个应该每天触发的函数,但它不仅没有按预期触发,而且每次服务器重置时都会触发(它昨天没有这样做)。数据每天只需要更新一次,而且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)
});
})有没有更好的方法来编写这个函数或者达到预期的结果呢?我每天只需要触发一次,但我的电脑不是全天候运行的。由于我仍在开发应用程序,我认为在Heroku或其他平台上托管服务器并不省时,但如果它能解决我的问题,我非常愿意尝试。
主要目标是告诉我的服务器每天运行一次,但检查它是否在过去24小时内运行。如果它还没有运行,就运行它。
jakemingolla回答:我的CRON表达式的格式不正确,不适合我的预期用途。*/23 **每隔23天(今天是24号,索引值+1 )触发,无限制,无其他值。这就是为什么我的函数今天一直在调用。我将CRON表达式更改为15 9 * * *,以在每天早上9点15分触发我的API调用。
发布于 2019-05-24 22:29:18
我不确定您的基于https://crontab.guru的CRON格式是正确的。基于* * */23 * *,这将对应于“在每23天的每一分钟”,这听起来不像你想要的。
例如,CRON字符串0 0 * * * *是每天的午夜。我会更新这个CRON字符串,看看它是否有助于缓解这个问题。
https://stackoverflow.com/questions/56294577
复制相似问题