每天午夜运行一个功能

时间:2014-10-10 18:48:34

标签: javascript node.js

walk.on('dir', function (dir, stat) {
    uploadDir.push(dir);
});

我正在使用Node,我需要让这个功能每天午夜运行,这是可能的吗?

4 个答案:

答案 0 :(得分:47)

我相信the node-schedule package会满足您的需求。通常,您希望所谓的cron安排并运行您的服务器任务。

使用 node-schedule

import schedule from 'node-schedule'

schedule.scheduleJob('0 0 * * *', () => { ... }) // run everyday at midnight

答案 1 :(得分:16)

node-schedule有一个节点包。

您可以这样做:

var j = schedule.scheduleJob({hour: 00, minute: 00}, function(){
    walk.on('dir', function (dir, stat) {
       uploadDir.push(dir);
    });
});

有关详细信息,请参阅here

答案 2 :(得分:10)

我使用以下代码:

function resetAtMidnight() {
    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() {
        reset();              //      <-- This is the function being called at midnight.
        resetAtMidnight();    //      Then, reset again next midnight.
    }, msToMidnight);
}

我认为在午夜运行函数有合法的用例。例如,就我而言,我在网站上显示了一些日常统计数据。如果网站恰好在午夜开放,则需要重置这些统计信息。

此外,this回复的信用额度。

答案 3 :(得分:3)

这是其他一些长期运行过程的一部分吗?它真的需要吗?如果是我,我会写一个快速运行的脚本,使用常规的旧cron来安排它,然后当过程完成时,终止它。

有时候将这些类型的计划任务构建到一个长期运行的进程中进行其他事情(我自己已经完成),并且在这些情况下提到的库是有意义的在其他答案中是你最好的选择,或者你总是可以写一个setTimeout()setInterval()循环来检查你的时间并在时间匹配时运行你的过程。但对于大多数情况来说,由cron发起的单独脚本和单独的进程就是您真正追求的目标。