2014-10-10 10 views
13
walk.on('dir', function (dir, stat) { 
    uploadDir.push(dir); 
}); 

Sto utilizzando Nodo e ho bisogno di eseguire questa funzione ogni giorno a mezzanotte, è possibile?Esecuzione di una funzione ogni giorno a mezzanotte

+0

possibile duplicato di [Esiste una libreria di pianificazione del lavoro per node.js?] (Http://stackoverflow.com/questions/3785736/is-there-a-job-scheduler-library-for-node-js) – Adam

+0

provo ad usare, ma è apparso che c'era una perdita di memoria –

+0

Il tuo commento non ha senso, ci sono 6 diversi pacchetti npm elencati in quella discussione. Hanno tutti perdite di memoria? – Adam

risposta

24

Credo the node-schedule package soddisfa le tue esigenze. In genere, si desidera il cosiddetto cron per pianificare ed eseguire le attività del server.

Con nodo-calendario:

import schedule from 'node-schedule' 

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

Grazie! Non so perché, ma questo pacchetto funziona e gli altri no. <3 –

+0

Beh, sono felice che funzioni per te, piacere :) – wap300

+0

Ci sono anche altri pacchetti di nodi simili: https://npmcompare.com/compare/agenda,cron,later,node-schedule – steampowered

12

Esiste un pacchetto di nodi per questo node-schedule.

si può fare qualcosa di simile:

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

Per ulteriori informazioni, vedere here

3

si tratta di una parte di qualche altro processo di lunga durata? Ha davvero bisogno di essere? Se fossi in me, scriverò semplicemente uno script in esecuzione rapida, useremo il vecchio cron normale per programmarlo, e poi quando il processo sarà completato, lo interromperò.

Occasionalmente è logico che questi tipi di attività pianificate siano incorporati in un processo altrimenti di lunga durata che fa altre cose (l'ho fatto io stesso), e in quei casi le librerie citate nelle altre risposte sono la soluzione migliore, oppure è sempre possibile scrivere un ciclo setTimeout() o setInterval() per controllare l'ora e avviare il processo quando l'ora coincide. Ma per la maggior parte degli scenari, uno script separato e un processo separato avviato da cron è ciò che stai veramente cercando.

+0

sì, questo uploaDir.push (dir) chiama un grande processo .. –

+0

sto avendo alcuni problemi, non posso usare un pacchetto di pianificazione o setTimeout() ... entrambi non funzionano .. –

+0

@Nescau - Perché non puoi usare un pacchetto di pianificazione o 'setTimeout()'. Entrambi dovrebbero funzionare bene. Devi aiutarci ad aiutarti. – jfriend00

6

Io uso il seguente codice:

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); 
} 

Penso che ci siano legittimi casi d'uso per l'esecuzione di una funzione a mezzanotte. Ad esempio, nel mio caso, ho un numero di statistiche giornaliere visualizzate su un sito web. Queste statistiche devono essere ripristinate se il sito web è aperto a mezzanotte.

Inoltre, crediti a this risposta.

Problemi correlati