Szukam harmonogramu pracy węzła, który pozwoli mi zaplanować szereg zadań w różnych odstępach czasu. Na przykład,
- wywołanie funkcji A co 30 sekund
- wywołać funkcję B co 60 sekund
- wywołanie funkcji C co 7 dni
Chcę również móc rozpocząć i zakończyć ten proces.
Do tej pory przyjrzałem się:
później - wprawia mnie w zakłopotanie składnia, najwyraźniej też nie możesz zaplanować zadań dłużej niż miesiąc
agenda - wydaje się najbardziej obiecująca, jednak jestem zdezorientowany co do funkcjonalności bazy danych
plan czasu - zbyt prosty, nie można uruchomić i zatrzymać
Uważam, że składnia tego ostatniego jest myląca.
node.js
cron
scheduled-tasks
user379468
źródło
źródło
Odpowiedzi:
Polecam
node-cron
. Pozwala na uruchamianie zadań z wykorzystaniem wzorców Crona np'* * * * * *' - runs every second '*/5 * * * * *' - runs every 5 seconds '10,20,30 * * * * *' - run at 10th, 20th and 30th second of every minute '0 * * * * *' - runs every minute '0 0 * * * *' - runs every hour (at 0 minutes and 0 seconds)
Ale także bardziej złożone harmonogramy np
'00 30 11 * * 1-5' - Runs every weekday (Monday through Friday) at 11:30:00 AM. It does not run on Saturday or Sunday.
Przykładowy kod : uruchamianie zadania co 10 minut:
var cron = require('cron'); var cronJob = cron.job("0 */10 * * * *", function(){ // perform operation e.g. GET request http.get() etc. console.info('cron job completed'); }); cronJob.start();
Więcej przykładów znajdziesz w wiki node-cron
Więcej informacji o konfiguracji crona można znaleźć na stronie cron wiki
Używam tej biblioteki w wielu projektach i spełnia swoje zadanie. Mam nadzieję, że to pomoże.
źródło
Użyłem node-cron i agendy .
node-cron jest bardzo prostą biblioteką, która zapewnia bardzo proste i łatwe do zrozumienia API, takie jak crontab. Nie wymaga żadnej konfiguracji i po prostu działa.
var cronJob = require('cron').CronJob; var myJob = new cronJob('00 30 11 * * 1-5', function(){...}); myJob.start();
program ma bardzo duże możliwości i nadaje się do znacznie bardziej złożonych usług. Pomyśl o ifttt , musisz wykonywać miliony zadań. porządek obrad byłby najlepszym wyborem.
Uwaga: do korzystania z Agendy potrzebny jest Mongodb
var Agenda = require("Agenda"); var agenda = new Agenda({db: { address: 'localhost:27017/agenda-example'}}); agenda.every('*/3 * * * *', 'delete old users'); agenda.start();
źródło
Myślę, że najlepszy ranking to
a przykład harmonogramu węzłów jest poniżej:
var schedule = require("node-schedule"); var rule = new schedule.RecurrenceRule(); //rule.minute = 40; rule.second = 10; var jj = schedule.scheduleJob(rule, function(){ console.log("execute jj"); });
Może znajdziesz odpowiedź w modułach węzłów .
źródło
Napisałem moduł węzła, który zapewnia otokę wokół setInterval przy użyciu czasów trwania momentów zapewniających deklaratywny interfejs:
var every = require('every-moment'); var timer = every(5, 'seconds', function() { console.log(this.duration); }); every(2, 'weeks', function() { console.log(this.duration); timer.stop(); this.set(1, 'week'); this.start(); });
https://www.npmjs.com/package/every-moment
https://github.com/raygerrard/every-moment
źródło
node-cron
odpowiedzi @Tom. i ma ładną składnię podobną do twojej.reel().call(() => console.log('hello !!')).everyMinute().run()
github.com/shakee93/node-reelnodeJS domyślnie
https://nodejs.org/api/timers.html
setInterval(function() { // your function }, 5000);
źródło
W tym celu napisałem mały moduł o nazwie timexe :
Zainstalować:
posługiwać się:
var timexe = require('timexe'); //Every 30 sec var res1=timexe(”* * * * * /30”, function() console.log(“Its time again”)}); //Every minute var res2=timexe(”* * * * *”,function() console.log(“a minute has passed”)}); //Every 7 days var res3=timexe(”* y/7”,function() console.log(“its the 7th day”)}); //Every Wednesdays var res3=timexe(”* * w3”,function() console.log(“its Wednesdays”)}); // Stop "every 30 sec. timer" timexe.remove(res1.id);
Funkcję start / stop można osiągnąć, usuwając / ponownie dodając wpis bezpośrednio w tablicy zadań timexe. Ale to nie jest funkcja ekspresowa.
źródło