Có thư viện lập lịch công việc cho node.js không? [đóng cửa]


155

Có một số cron như thư viện sẽ cho phép tôi lên lịch một số chức năng sẽ được chạy vào thời gian nhất định (ví dụ 15:30, không phải x giờ kể từ bây giờ, v.v.)? Nếu không có loại thư viện này thì nên thực hiện như thế nào? Tôi có nên đặt cuộc gọi lại để được gọi mỗi giây và kiểm tra thời gian và bắt đầu công việc được lên lịch cho thời gian hay không?


4
node-cron dường như là một lựa chọn rất tốt
JtR

var calendar = Yêu cầu ('nút-lịch'); là những điều tốt nhất. chúc mừng !!!
Saumyajit

Câu trả lời:


122

nút-cron thực hiện đúng như những gì tôi mô tả


4
Bạn có viết các khai báo cronjob trong app.js / scripts.js không?
ArVan

không nút-cron cho phép bạn chỉnh sửa hệ thống công việc cron từ Node.js? Có phụ thuộc vào quá trình nút chạy không? hoặc nó sẽ cho phép bạn chạy các chương trình ngay cả sau khi quá trình chính của bạn kết thúc?
Ajar

5
@Ajar không, sau khi chấm dứt quá trình nodejs, tất cả các công việc sẽ bị mất. Không có bảng cron nào được vận chuyển với nút-cron
Upvote

1
Tôi đoán vậy @ChrisC. Nếu tôi không sử dụng bất kỳ khuôn khổ nào, tôi sẽ khai báo app.js. Trong sails.jstôi làm điều đó trongbootstrap
ArVan

2
@arVan Nếu bạn quan tâm, tôi thực sự bắt đầu làm việc trên agendađể hỗ trợ thêm đường dọc tâm ở đây: github.com/mikermcneil/agenda (theo nghĩa đen chỉ mới bắt đầu though- nên có một số tiến bộ có thể sử dụng bằng cách vào tuần tới)
mikermcneil

44

nút-calendar Một bộ lập lịch công việc giống như cron và không cron cho Node.


2
Điều này quản lý để tránh cú pháp crontab đôi khi khó hiểu, và theo tôi là dễ đọc hơn một chút.
Simon East

giống như chương trình nghị sự, nó tạo ra sự bền bỉ 0.1.13
drdrej

5
lịch trình nút không cung cấp sự kiên trì. Theo các tài liệu: 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

chương trình nghị sự là một lịch trình công việc nhẹ cho nút. Điều này sẽ giúp bạn.


1
chương trình nghị sự dựa trên nút-cron với một lớp liên tục (mongo). vì vậy câu trả lời ở trên là tốt hơn
drdrej

51
Để làm rõ, với tư cách là tác giả của chương trình nghị sự, nó thực sự không dựa trên nút-cron nào cả ...
Ryan

1
Thư viện chương trình nghị sự là thư viện tốt nhất và duy nhất vì thiết lập đơn giản và sử dụng dễ dàng cho người dùng. Kudos
@Ryan

4
Tôi đã phát hiện agendacó hành vi không nhất quán và sẽ không khuyên sử dụng nó. Kiểm tra các vấn đề mở và PR để thực hiện cuộc gọi của riêng bạn.
Nga

2
lưu ý, chương trình nghị sự không sẵn sàng sản xuất. Nó có vấn đề rò rỉ bộ nhớ và kiểm tra các vấn đề. Vẫn còn rất nhiều lỗi. Có vẻ đầy hứa hẹn khi sẵn sàng.
Sebastian

15

later.js là một thư viện "trình lập lịch biểu" JavaScript khá tốt. Có thể chạy trên Node.js hoặc trong trình duyệt web.


3
Tôi đã thử một vài gợi ý trong chủ đề này, nhưng mô-đun này tôi thấy là fwd thân thiện và dễ sử dụng nhất để làm việc với .. cảm ơn!
Gene Bo

12

Tôi đang sử dụng kue: https://github.com/learnboost/kue . Nó là khá tốt đẹp.

Các tính năng chính thức và ý kiến ​​của tôi:

  1. công việc bị trì hoãn.
    • Nếu bạn muốn để công việc chạy vào một thời điểm cụ thể, hãy tính mili giây trong khoảng thời gian đó đến bây giờ. Gọi job.delay (mili giây) (Tài liệu nói phút, sai.) Đừng quên thêm "jobs.promote ();" khi bạn bắt đầu công việc.
  2. sự kiện công việc và tiến độ pubsub.
    • Tôi không hiểu nó
  3. UI tích hợp phong phú.
    • Rất hữu ích. Bạn có thể kiểm tra trạng thái công việc (đã hoàn thành, đang chạy, bị trì hoãn) trong UI được tích hợp và không cần phải viết bất kỳ mã nào. Và bạn có thể xóa các bản ghi cũ trong UI.
  4. cuộn vô hạn
    • Đôi khi không làm việc. Phải làm mới.
  5. Chỉ dẫn tiến trình giao diện người dùng
    • Tốt cho các công việc tốn thời gian.
  6. đăng nhập cụ thể công việc
    • Vì chúng là các công việc bị trì hoãn, bạn nên đăng nhập thông tin hữu ích trong công việc và kiểm tra sau thông qua UI.
  7. được cung cấp bởi Redis
    • Rất hữu ích. Khi bạn khởi động lại ứng dụng node.js, tất cả các bản ghi công việc vẫn ở đó và các công việc được lên lịch cũng sẽ thực hiện!
  8. thử lại tùy chọn
    • Đẹp.
  9. khả năng tìm kiếm toàn văn
    • Tốt
  10. API JSONful
    • Âm thanh tốt, nhưng tôi không bao giờ sử dụng nó.

Biên tập:

  1. Kue không phải là một cron như thư viện.
  2. Theo mặc định, kue không hỗ trợ công việc chạy liên tục (ví dụ: Chủ nhật hàng tuần).

6
Kue là một hàng đợi công việc, không phải là một lịch trình.
Leonid Beschastny

1
@LeonidBeschastny Kue là một hàng đợi công việc. Và nó cũng là một trình lập lịch biểu, bởi vì nó có thể "cho phép tôi lên lịch một số chức năng sẽ được chạy vào một thời điểm nhất định".
Vince Yuan

Tôi nghĩ rằng công việc Kue chỉ có thể bị trì hoãn, nhưng không được lên lịch đến một thời gian nhất định.
Leonid Beschastny

@LeonidBeschastny Bạn nói đúng. Kue không cung cấp api để sắp xếp công việc đến một thời điểm nhất định. Nhưng như tôi đã đề cập, "Nếu bạn muốn để công việc chạy vào một thời điểm cụ thể, hãy tính mili giây giữa thời gian đó và bây giờ. Gọi job.delay (mili giây) (Tài liệu nói là vài phút, rất sai.)" Rất dễ dàng .
Vince Yuan

1
Bạn có thể dùng thử kue-calendaruler, tương tự như aganda
Fruch

9

node-crontab cho phép bạn chỉnh sửa các công việc cron hệ thống từ node.js. Sử dụng thư viện này sẽ cho phép bạn chạy các chương trình ngay cả sau khi quá trình chính của bạn chấm dứt. Tuyên bố miễn trừ trách nhiệm: Tôi là nhà phát triển.


Vì vậy, nó vẫn tồn tại nếu máy chủ nút được thiết lập lại?
jonperl


Vâng, công việc vẫn tồn tại.
Blago

GPL của nó được cấp phép, vì vậy không thể sử dụng trong một dự án thương mại.
drdrej

5
Giấy phép hiện là MIT
Blago

8

Bạn có thể sử dụng timexe

Cách sử dụng đơn giản, trọng lượng nhẹ, không phụ thuộc, có cú pháp được cải thiện so với cron, với độ phân giải tính bằng mili giây và hoạt động trong trình duyệt.

Tải về:

npm install timexe

Sử dụng:

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

(Tôi là tác giả)


tôi có thể lấy một số ví dụ cho điều này xin vui lòng?
Alex

1
Xin hãy xem các ví dụ trên github: github.com/paragi/timexe
Simon Rigét

2

Tôi là auhor của nút-runnr . Nó có một cách tiếp cận rất đơn giản để tạo ra công việc. Nó cũng rất dễ dàng và rõ ràng để tuyên bố thời gian và khoảng thời gian. Ví dụ: để thực hiện một công việc cứ sau 10 phút 20 giây,

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

Để làm một công việc lúc 10 giờ sáng và 3 giờ chiều hàng ngày,

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

Nó đơn giản mà. Để biết thêm chi tiết: https://github.com/Saquib764/node-runnr




0

Điều này sẽ không phù hợp với tất cả mọi người, nhưng nếu ứng dụng của bạn đã được thiết lập để nhận lệnh qua ổ cắm, bạn có thể sử dụng netcat để phát lệnh thông qua cron đúng.

echo 'mycommand' | nc -U /tmp/myapp.sock
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.