Esiste una libreria di pianificazione lavoro per node.js? [chiuso]


155

Esiste una libreria come cron che mi permetterebbe di programmare alcune funzioni da eseguire in un determinato momento (15:30 per esempio, non tra x ore da ora ecc.)? Se non esiste questo tipo di libreria, come dovrebbe essere implementato? Devo solo impostare il callback per essere chiamato ogni secondo e controllare l'ora e iniziare i lavori programmati per l'ora o cosa?


4
node-cron sembra essere un'ottima opzione
JtR

var schedule = request ('pianificazione nodo'); è le cose migliori. Saluti!!!
Saumyajit,

Risposte:


122

node-cron fa esattamente quello che ho descritto


4
scrivi le dichiarazioni cronjob in app.js / scripts.js?
ArVan,

non nodo-Cron consentono di cron jobs sistema Modifica dal node.js? Dipende dal processo del nodo in esecuzione? o ti consentirà di eseguire programmi anche dopo il termine del processo principale?
Ajar

5
@Ajar no, dopo la conclusione del processo nodejs, tutti i lavori andranno persi. Non esiste una tabella cron fornita con node-cron
Upvote

1
Immagino così @ChrisC. Se non sto usando alcun framework, dichiaro crons in app.js. In sails.jslo faccio inbootstrap
ArVan il

2
@arVan se sei interessato, ho effettivamente iniziato a lavorare agendaper aggiungere il supporto Waterline qui: github.com/mikermcneil/agenda (letteralmente appena iniziato però - dovrebbero avere dei progressi utilizzabili entro la prossima settimana)
mikermcneil

44

node-schedule Un programmatore di lavori cron-like e non-like per Node.


2
Questo riesce a evitare la sintassi a volte confusa di crontab, ed è un po 'più leggibile secondo me.
Simon East

come l'agenda sembra fornire persistenza 0.1.13
drdrej

5
la pianificazione dei nodi non fornisce persistenza. Secondo i documenti: Note that node-schedule is designed for in-process scheduling, i.e. scheduled jobs will only fire as long as your script is running, and the schedule will disappear when execution completes.
Mike Hedman,

34

l'agenda è una pianificazione dei lavori leggera per il nodo. Questo ti aiuterà.


1
l'agenda si basa su node-cron con un livello persistente (mongo). quindi la risposta sopra è migliore.
drdrej,

51
Per chiarire, in quanto autore dell'agenda, in realtà non è affatto basato su node-cron ...
Ryan,

1
La libreria dell'agenda è l'unica e la migliore libreria in quanto l'installazione è semplice e l'utilizzo è facile per l'utente. Kudos @Ryan
Vimalraj Selvam,

4
Ho scoperto agendadi avere un comportamento incoerente e non consiglierei di usarlo. Controlla le questioni aperte e le PR per effettuare la tua chiamata.
Russbear,

2
attenzione, l'agenda non è pronta per la produzione. Ha problemi di perdita di memoria e verifica la presenza di problemi. Ha ancora molti bug. Sembra promettente quando pronto.
Sebastian,

15

later.js è una libreria "scheduler" JavaScript piuttosto buona. Può essere eseguito su Node.js o in un browser Web.


3
Ho provato alcuni dei suggerimenti in questo thread, ma questo modulo mi è sembrato il più facile da usare e diretto con cui lavorare .. grazie!
Gene Bo,

12

Sto usando kue: https://github.com/learnboost/kue . È molto carino

Le caratteristiche ufficiali e i miei commenti:

  1. lavori in ritardo.
    • Se si desidera consentire l'esecuzione del lavoro in un momento specifico, calcolare i millisecondi tra quel momento e ora. Chiama job.delay (millisecondi) (Il documento dice minuti, che è sbagliato.) Non dimenticare di aggiungere "jobs.promote ();" quando inizi i lavori.
  2. evento di lavoro e progresso pubsub.
    • Non lo capisco
  3. ricca interfaccia utente integrata.
    • Molto utile. Puoi controllare lo stato del lavoro (fatto, in esecuzione, ritardato) nell'interfaccia utente integrata e non è necessario scrivere alcun codice. E puoi eliminare i vecchi record nell'interfaccia utente.
  4. scorrimento infinito
    • A volte non funziona. Devo rinfrescare.
  5. Indicazione di avanzamento dell'interfaccia utente
    • Buono per i lavori che richiedono tempo.
  6. registrazione specifica del lavoro
    • Poiché si tratta di lavori in ritardo, è necessario registrare informazioni utili nel lavoro e controllare successivamente tramite l'interfaccia utente.
  7. realizzato da Redis
    • Molto utile. Quando riavvii l'app node.js, tutti i record dei lavori sono ancora lì e anche i lavori pianificati verranno eseguiti!
  8. tentativi opzionali
    • Bello.
  9. capacità di ricerca full-text
    • Buona.
  10. API JSON RESTful
    • Suona bene, ma non lo uso mai.

Modificare:

  1. kue non è un cron come libreria.
  2. Di default kue non supporta lavori che vengono eseguiti ripetutamente (ad es. Ogni domenica).

6
Kue è una coda di lavoro, non uno scheduler.
Leonid Beschastny,

1
@LeonidBeschastny Kue è una coda di lavoro. Ed è anche uno scheduler, perché può "permettermi di programmare alcune funzioni da eseguire in un determinato momento".
Vince Yuan,

Pensavo che i lavori di Kue potessero essere solo ritardati, ma non programmati per un certo tempo.
Leonid Beschastny,

@LeonidBeschastny Hai ragione. Kue non fornisce api per pianificare un lavoro per un certo tempo. Ma come ho detto, "Se vuoi che il lavoro venga eseguito in un momento specifico, calcola i millisecondi tra quel momento e ora. Chiama job.delay (millisecondi) (Il documento dice minuti, che è sbagliato.)" È molto facile .
Vince Yuan,

1
Potresti provare kue-scheduler, che è simile all'aganda
Fruch,

9

node-crontab consente di modificare i processi cron di sistema da node.js. L'utilizzo di questa libreria ti consentirà di eseguire programmi anche dopo i termini del processo principale. Disclaimer: sono lo sviluppatore.


quindi persiste se il server nodo viene ripristinato?
Jon


Sì, i lavori persistono.
Blago,

la sua licenza GPL, quindi non utilizzabile in un progetto commerciale.
drdrej,

5
La licenza è ora MIT
Blago,

8

Puoi usare timexe

È semplice da usare, leggero, non ha dipendenze, ha una sintassi migliorata rispetto a cron, con una risoluzione in millisecondi e funziona nel browser.

Installare:

npm install timexe

Uso:

var timexe = require('timexe');
var res = timexe("* * * 15 30", function(){ console.log("It's now 3:30 pm"); });

(Sono l'autore)


posso avere qualche esempio per questo, per favore?
Alex,

1
Dai

2

Sono l'autore del nodo runnr . Ha un approccio molto semplice per creare lavoro. È anche molto facile e chiaro dichiarare il tempo e l'intervallo. Ad esempio, per eseguire un lavoro ogni 10 minuti e 20 secondi,

Runnr.addIntervalJob('10:20', function(){...}, 'myjob')

Per fare un lavoro ogni giorno alle 10 e alle 15,

Runnr.addDailyJob(['10:0:0', '15:0:0'], function(){...}, 'myjob')

È così semplice. Per ulteriori dettagli: https://github.com/Saquib764/node-runnr




0

Questo non sarà adatto a tutti, ma se l'applicazione è già configurata per accettare comandi tramite un socket, è possibile utilizzare netcat per emettere comandi tramite cron proprio.

echo 'mycommand' | nc -U /tmp/myapp.sock
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.