【问题标题】:nodeJs node-schedule not working properlynodeJs节点计划无法正常工作
【发布时间】:2018-06-08 06:58:42
【问题描述】:

我正在使用 node-schedule 包来安排我的工作。我想在一天中的特定时间重新启动我的服务器,下面是代码:

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

    /**
     * This is used to restart the server after some interval
     * we are using pm2 (https://github.com/Unitech/pm2) to run server as process
     * when the server is closed, pm2 automatically restart the server
     */
    var restartInterval='* 4,8,12,16,20,23 * * *';
    var j = schedule.scheduleJob(restartInterval, function () {
        console.log("stopping server!!!!!");
        //Code to stop server
        try {
            process.exit(1);
        } catch (err) {

            console.log(err)
        }
    });

但是调度程序运行不正常,当我早上看到日志时,我注意到作业每分钟都在执行。我使用pm2 在服务器被调度程序停止时自动启动服务器。

我错过了什么吗?

【问题讨论】:

  • 您好,现在您每分钟都在停止服务器吗?
  • 是的,这就是现在发生的事情。
  • 您的代码中的其他地方是否可能有另一个具有该频率的调度程序?
  • 我的代码中没有任何其他时间表

标签: node.js scheduler


【解决方案1】:

这是我认为的问题: 您的var restartInterval='* 4,8,12,16,20,23 * * *'; 实际上将在给定时间的每一分钟执行作业,因此例如在 12 点,您的服务器将在 12:00 关闭,重新启动,在 12:01 再次关闭,依此类推...

我的猜测是您的日志仅显示给定小时内的每分钟停止重启。

如果您想具体到小时,请使用以下语法:

var restartInterval='00 4,8,12,16,20,23 * * *';

【讨论】:

    【解决方案2】:

    最好使用更简单的格式来指定时间表,例如,您可以使用以下更易于管理的约定来代替 cron 表达式:

    /* 每周日凌晨 2:30 运行 */

    cron.scheduleJob(**{hour: 2, minute: 30, dayOfWeek: 0}**, function(){
        console.log('This runs at 2:30AM on every Sunday');
    });
    

    还有其他用于调度的模块,以防您有特殊的用例。

    这在 MIT 许可下可用。

    https://github.com/agenda/agenda

    【讨论】:

    • 如果我们想在特定时间运行任务,这有​​效,但如果我们想以连续间隔执行任务,则无效。
    猜你喜欢
    • 2017-11-08
    • 2018-12-05
    • 2013-03-23
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多