Czy istnieje biblioteka harmonogramu zadań dla node.js? [Zamknięte]


155

Czy jest jakaś biblioteka, taka jak cron, która pozwoliłaby mi zaplanować uruchomienie jakiejś funkcji w określonym czasie (na przykład 15:30, a nie x godzin od teraz itp.)? Jeśli nie ma takiej biblioteki, jak należy to zaimplementować? Czy powinienem ustawić wywołanie zwrotne co sekundę i sprawdzić godzinę i rozpocząć zaplanowane na ten czas zadania, czy co?


4
node-cron wydaje się być bardzo dobrą opcją
JtR

var schedule = require ('node-schedule'); to najlepsze rzeczy. Twoje zdrowie!!!
Saumyajit

Odpowiedzi:


122

node-cron robi to, co opisałem


4
czy piszesz deklaracje cronjob w app.js / scripts.js?
ArVan

czy node-cron pozwala edytować systemowe zadania cron z node.js? Czy jest to zależne od działającego procesu węzła? czy też pozwoli ci uruchamiać programy nawet po zakończeniu głównego procesu?
Ajar

5
@Ajar nie, po zakończeniu procesu nodejs wszystkie zadania zostaną utracone. Nie ma tabeli crona dostarczonej z node-cron
głosowanie za aprobatą

1
Chyba tak @ChrisC. Jeśli nie używam żadnego frameworka, deklaruję crony w app.js. W sails.jsRobię to wbootstrap
Arvan

2
@arVan, jeśli jesteś zainteresowany, faktycznie zacząłem pracować nad agendadodaniem wsparcia Waterline tutaj: github.com/mikermcneil/agenda ( chociaż dosłownie dopiero się zaczęło - powinien mieć jakiś użyteczny postęp w przyszłym tygodniu)
mikermcneil

44

node-schedule Harmonogram zadań podobny do crona i nie do crona dla Node.


2
Pozwala to uniknąć czasami mylącej składni crontab i moim zdaniem jest trochę bardziej czytelny.
Simon East

jak program wydaje się zapewniać wytrwałość 0.1.13
drdrej

5
harmonogram węzłów nie zapewnia trwałości. Zgodnie z dokumentacją: 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

agenda to lekkie planowanie zadań dla węzła. To ci pomoże.


1
agenda oparta jest na node-cron z trwałą warstwą (mongo). więc odpowiedź powyżej jest lepsza.
drdrej

51
Aby wyjaśnić, jako autor agendy, w rzeczywistości wcale nie jest oparty na node-cron ...
Ryan

1
Biblioteka planów jest jedyną najlepszą biblioteką, ponieważ konfiguracja jest prosta, a korzystanie z niej jest łatwe dla użytkownika. Kudos @Ryan
Vimalraj Selvam

4
Stwierdziłem, agendaże mam niespójne zachowanie i nie radziłbym go używać. Sprawdź otwarte problemy i PR, aby wykonać własną rozmowę.
Russbear

2
bądź świadomy, program nie jest gotowy do produkcji. Ma problemy z wyciekiem pamięci i sprawdź problemy. Nadal ma wiele błędów. Po przygotowaniu wygląda obiecująco.
Sebastian

15

later.js jest dobrym dość JavaScript „scheduler” biblioteka. Może działać na Node.js lub w przeglądarce internetowej.


3
Wypróbowałem kilka sugestii w tym wątku, ale ten moduł okazał się najbardziej przyjazny dla użytkownika i prosty w obsłudze … dzięki!
Gene Bo

12

Używam kue: https://github.com/learnboost/kue . To całkiem miłe.

Oficjalne funkcje i moje komentarze:

  1. opóźnione prace.
    • Jeśli chcesz, aby zadanie było uruchamiane w określonym czasie, oblicz liczbę milisekund między tym czasem a teraz. Wywołaj job.delay (milisekundy) (dokument podaje minuty, co jest błędne). Nie zapomnij dodać "jobs.promote ();" kiedy rozpoczynasz pracę.
  2. wydarzenie pracy i pubsub postęp.
    • Nie rozumiem tego.
  3. bogaty zintegrowany interfejs użytkownika.
    • Bardzo przydatne. Możesz sprawdzić status zadania (wykonane, uruchomione, opóźnione) w zintegrowanym interfejsie użytkownika i nie musisz pisać żadnego kodu. Możesz usunąć stare rekordy w interfejsie użytkownika.
  4. nieskończone przewijanie
    • Czasami nie działa. Muszę odświeżyć.
  5. Wskaźnik postępu interfejsu użytkownika
    • Dobry do czasochłonnych prac.
  6. logowanie specyficzne dla zadania
    • Ponieważ są to prace opóźnione, należy zarejestrować przydatne informacje w zadaniu i sprawdzić później w interfejsie użytkownika.
  7. obsługiwane przez Redis
    • Bardzo przydatne. Po ponownym uruchomieniu aplikacji node.js wszystkie rekordy zadań nadal tam są, a zaplanowane zadania również zostaną wykonane!
  8. opcjonalne ponowne próby
    • Miły.
  9. możliwości wyszukiwania pełnotekstowego
    • Dobry.
  10. RESTful JSON API
    • Brzmi dobrze, ale nigdy go nie używam.

Edytować:

  1. kue nie jest biblioteką typu cron.
  2. Domyślnie kue nie obsługuje zadań, które są uruchamiane wielokrotnie (np. W każdą niedzielę).

6
Kue to kolejka zadań, a nie planista.
Leonid Beschastny

1
@LeonidBeschastny Kue to kolejka zadań. Jest to również harmonogram, ponieważ może „zaplanować uruchomienie jakiejś funkcji w określonym czasie”.
Vince Yuan

Myślałem, że prace Kue można tylko opóźnić, ale nie zaplanować ich na określony czas.
Leonid Beschastny

@LeonidBeschastny Masz rację. Kue nie zapewnia interfejsu API do planowania pracy w określonym czasie. Ale jak wspomniałem: „Jeśli chcesz, aby zadanie było wykonywane w określonym czasie, oblicz milisekundy między tym czasem a teraz. Zadzwoń do job.delay (milisekundy) (lekarz podaje minuty, co jest błędne)”. To bardzo proste .
Vince Yuan

1
Możesz spróbować kue-scheduleer, który jest podobny do agandy
Fruch

9

node-crontab pozwala na edycję systemowych zadań cron z node.js. Korzystanie z tej biblioteki umożliwia uruchamianie programów nawet po zakończeniu głównego procesu. Zastrzeżenie: jestem programistą.


więc utrzymuje się, jeśli serwer węzła jest resetowany?
jonperl


Tak, prace są utrzymywane.
Blago

jest na licencji GPL, więc nie nadaje się do użytku komercyjnego.
drdrej

5
Licencja jest teraz MIT
Blago

8

Możesz użyć timexe

Jest prosty w użyciu, lekki, nie ma żadnych zależności, ma ulepszoną składnię w porównaniu z cronem, z rozdzielczością w milisekundach i działa w przeglądarce.

Zainstalować:

npm install timexe

Posługiwać się:

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

(Jestem autorem)


czy mogę dostać jakiś przykład na to, proszę?
Alex,

1
Proszę spojrzeć na przykłady na github: github.com/paragi/timexe
Simon Rigét

2

Jestem autorem node-runnr . Ma bardzo proste podejście do tworzenia miejsc pracy. Również bardzo łatwe i jasne jest zadeklarowanie czasu i interwału. Na przykład, aby wykonać zadanie co 10 minut i 20 sekund,

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

Aby wykonywać pracę codziennie o 10:00 i 15:00,

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

To takie proste. Więcej szczegółów: https://github.com/Saquib764/node-runnr




0

To nie będzie odpowiednie dla wszystkich, ale jeśli twoja aplikacja jest już skonfigurowana do przyjmowania poleceń przez gniazdo, możesz użyć netcata do wydawania poleceń przez właściwy cron.

echo 'mycommand' | nc -U /tmp/myapp.sock
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.