【问题标题】:Automatic run function daily at specific time每天特定时间自动运行功能
【发布时间】:2017-05-27 05:50:05
【问题描述】:

我正在做一个关于 CMS 系统的学校项目,以帮助运营我的学校网站。它使用 3 个数据库:

  • MongoDB(头部数据库,存储所有信息)
  • Redis(存储网站菜单)
  • Elasticsearch(存储帖子)

目前,当我插入/编辑/删除数据时,我也会向相关数据库插入/编辑/删除。但是我的导师要我写一个函数,让系统在特定时间(用户可以选择何时)在这 3 个数据库之间自动同步数据。

我的服务器使用Node JS来操作,这个需求对我来说是新的,之前没听说过。我的新方法是:

  • 向数据库字段添加 1 个标志
  • 选择所有包含 flag == true 的行。
  • 同步数据

但我不知道如何在特定时间自动运行上述功能。我希望你们能帮助我优化我的新流程并解决同步问题。

谢谢大家!!!

编辑 1:更改标题。

编辑2:我从这个主题找到了一个解决方案:Running a function everyday midnight,如果同步数据时出现错误,是否可以重新运行这个函数。像这样:

function syncDataAtMidNight(){
 var now = new Date();
    var night = new Date(
        now.getFullYear(),
        now.getMonth(),
        now.getDate() + 1, // the next day, ...
        0, 0, 0 // ...at 00:00:00 hours
    );
    var msToMidnight = night.getTime() - now.getTime();

    setTimeout(function() {
    // is this a correct way to loop, in case of error when sync ???
        myFunctionSync(err, resp) {
          if(err){
            myFunctionSync();
          } else {
             changeFlagToFalse();
             syncDataAtMidNight();
          }
        }              
    }, msToMidnight);}

【问题讨论】:

  • 在你的 node.js 程序中,你可以使用setTimeout() 让某事从现在开始运行任意数量的毫秒。获取当前时间并计算距离您希望函数运行的时间还有多少毫秒,然后发出 setTimeout() 调用来安排它。如果这个问题真的只是关于在将来某个时间运行一个函数,请将问题的标题和主体更改为与此有关。
  • @jfriend00 谢谢,我编辑了标题并为此添加了新的解决方案。你能帮我再检查一遍吗?
  • 嗯,问题在这里的运作方式,你可以澄清你的初衷,但你不应该把你的问题变成一个新的问题。如果出现错误,您现在似乎正在询问有关再次运行该功能的新问题。这和你第一次问的完全不同。如果你不断改变你所问问题的症结,人们会避免花时间在你的问题上。仅供参考,您第一次调用 myFunctionSync() 的语法不是用于调用函数的合法 Javascript。我不确定你想在那里做什么,因为你没有显示myFunctionSync() 代码。
  • 我找到了解决问题的方法。我很少在堆栈上发布问题,所以我不知道您在说什么,感谢您的评论,我会记下。无论如何,谢谢。
  • 这就是为什么我要教你网站的规则,这样下次你会更好地知道如何利用这个网站。

标签: node.js mongodb elasticsearch redis synchronization


【解决方案1】:

您应该考虑使用cron,他在系统级别具有显着优势,他可以获得代码错误返回,并且在必要时主要是启动/重新启动节点。

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2016-08-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多