【问题标题】:Can node-cron run every minute offset by a few secondsnode-cron 可以每分钟运行几秒偏移吗
【发布时间】:2019-10-01 02:24:11
【问题描述】:

我可以安排 node-cron 每分钟或每 30 秒运行一次(参见代码),但我希望它每分钟半点运行一次。原因是我每小时还安排了另一个任务,我希望在每小时任务运行之前完成分钟任务。

分钟任务读取 Modbus 值并将日志记录到 MongoDB 数据库。每小时任务获取所有记录并将它们发布到 REST 端点并记录同步时间。由于两个任务在整点同时运行,因此 POST 中省略了一个值。

var cron = require('node-cron');

cron.schedule('* * * * *', () => { // Every minute
    console.log("--------------------------------------------------");
    console.log('Cron Task - Time: ' + (new Date()));
    console.log("--------------------------------------------------");
});

cron.schedule('*/30 * * * * *', () => { // Every 30 seconds
    console.log("--------------------------------------------------");
    console.log('Cron Task - Time: ' + (new Date()));
    console.log("--------------------------------------------------");
});

【问题讨论】:

    标签: node.js cron


    【解决方案1】:

    您应该管理您的日程安排,并告诉 CPU 运行在哪一个之后,首先运行 30 秒,然后是一分钟,最后是一小时的日程安排。在接下来的一分钟和一小时内,一切正常并自动运行它。

    var cron = require('node-cron');
    var minutsBoolean = false;
    var hourBoolean = false;
    
    function oneHourIsRun() {
        cron.schedule('* 0-23 * * *', () => { // Every hour
            console.log("--------------------------------------------------");
            console.log('Cron Task - Time: ' + (new Date()));
            //hourly task grabs all of the records and POSTs them to a REST endpoint and logs the sync time
            console.log("--------------------------------------------------");
        });
    }
    function oneMinutsIsRun() {
        cron.schedule('* * * * *', () => { // Every one minuts, runnig after 30 second
            console.log("--------------------------------------------------");
            console.log('Cron Task - Time: ' + (new Date()));
            //minute task reads Modbus values and logs to a MongoDB database .then() {below code in here}
            if (!hourBoolean) {
                oneHourIsRun();
                hourBoolean = true;
            }
            console.log("--------------------------------------------------");
        });
    }
    
    cron.schedule('30 * * * * *', () => { // Every 30 second, */30 ruunig in 30 minuts of hour not 30 secend
        console.log("--------------------------------------------------");
        console.log('Cron Task - Time: ' + (new Date()));
        if (!minutsBoolean) {
            oneMinutsIsRun();
            minutsBoolean = true;
        }
        console.log("--------------------------------------------------");
    });
    

    【讨论】:

    • 感谢 Mohammad,您的回答会奏效,但我试图避免使用除仅使用 cron 表达式之外的任何其他逻辑。
    【解决方案2】:

    通过一些尝试错误,我想通了。以下每分钟运行半点:

    var cron = require('node-cron');
    
    cron.schedule('30 0-59 * * * *', () => { // Every minute offset 30 seconds
        console.log("--------------------------------------------------");
        console.log('Cron Task - READ - Time: ' + (new Date()));
        console.log("--------------------------------------------------");
    });
    
    /*
    --------------------------------------------------
    Cron Task - READ - Time: Tue Oct 01 2019 10:09:30 GMT-0400 (EDT)
    --------------------------------------------------
    --------------------------------------------------
    Cron Task - READ - Time: Tue Oct 01 2019 10:10:30 GMT-0400 (EDT)
    --------------------------------------------------
    --------------------------------------------------
    Cron Task - READ - Time: Tue Oct 01 2019 10:11:30 GMT-0400 (EDT)
    --------------------------------------------------
    --------------------------------------------------
    Cron Task - READ - Time: Tue Oct 01 2019 10:12:30 GMT-0400 (EDT)
    --------------------------------------------------
    */
    

    我最终使读取任务每分钟都在运行,但每小时同步任务在整点后 30 秒运行:

    var cron = require('node-cron');
    const schedule_read = require('./schedule_read');
    const schedule_sync = require('./schedule_sync');
    
    cron.schedule('* * * * *', () => { // Every minute
        console.log("--------------------------------------------------");
        console.log('Cron Task - READ - Time: ' + (new Date()));
        console.log("--------------------------------------------------");
        schedule_read.read();
    });
    
    cron.schedule('30 0 0-23 * * *', () => { // Every hour offset by 30 seconds
        console.log("--------------------------------------------------");
        console.log(' Cron Task - SYNC - Time: ' + (new Date()));
        console.log("--------------------------------------------------");
        schedule_sync.sync();
    });
    

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 2023-03-09
      • 2012-07-14
      • 2014-08-07
      • 2011-06-20
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      相关资源
      最近更新 更多