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.