是否有用于node.js的作业调度程序库?[关闭]


155

是否有一些cron之类的库,可以让我安排某些功能在特定时间运行(例如15:30,而不是从现在开始x个小时等等)?如果没有这种库,应该如何实现呢?我是否应该将回调设置为每秒调用一次,检查时间并开始为该时间安排的作业?


4
node-cron似乎是一个很好的选择
JtR

var schedule = require('node-schedule'); 是最好的东西。干杯!!!
Saumyajit

Answers:


122

node-cron就是我所描述的


4
你在app.js / scripts.js中编写cronjob声明吗?
2012年

没有节点的Cron允许你从node.js的编辑系统cron作业?是否取决于运行的节点进程?还是在主进程终止后仍允许您运行程序?
2014年

5
@Ajar不,在nodejs进程终止后,所有作业都将丢失。node-cron没有附带cron表
Upvote 2014年

1
我想@ChrisC。如果我不使用任何框架,则在中声明crons app.js。在sails.js我做的bootstrap
ArVan

2
@arVan,如果您有兴趣,我实际上已经开始在agenda此处添加水线支持:github.com/mikermcneil/agenda (虽然刚刚开始,但应该在下周有所进展)
mikermcneil 2014年

44

node-schedule Node的 cron类和非cron类作业调度程序。


2
这设法避免了有时令人困惑的crontab语法,并且在我看来更具可读性。
西蒙东

像议事日程一样,它可以提供持久性0.1.13
drdrej 2014年

5
节点计划不提供持久性。根据文档: 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

议程是节点的轻型作业调度。这将为您提供帮助。


1
议程基于具有持久层(mongo)的node-cron。所以上面的答案更好。
drdrej 2014年

51
需要澄清的是,作为议程的作者,它实际上根本不是基于node-cron ...
Ryan

1
议程库是唯一的也是唯一的最佳库,因为设置简单且用户易于使用。荣誉@Ryan
Vimalraj Selvam

4
我发现agenda行为不一致,因此不建议使用它。检查未解决的问题和PR,打自己的电话。
俄罗斯熊

2
请注意,议程尚未准备就绪。它存在内存泄漏问题,并检查是否有问题。仍然有很多错误。准备就绪时看起来很有希望。
塞巴斯蒂安

15

Later.js是一个非常不错的JavaScript“调度程序”库。可以在Node.js或Web浏览器上运行。


3
我尝试了该线程中的一些建议,但是我发现此模块是使用起来最友好和最直接的..谢谢!
Gene Bo

12

我正在使用kue:https : //github.com/learnboost/kue。很好

官方功能和我的评论:

  1. 延迟的工作。
    • 如果要让作业在特定时间运行,请计算该时间与现在之间的毫秒数。调用job.delay(milliseconds)(文档说分钟,这是错误的。)不要忘记添加“ jobs.promote();”。当您启动工作时。
  2. 工作事件和进度pubsub。
    • 我不明白
  3. 丰富的集成UI。
    • 很有用。您可以在集成的UI中检查作业状态(完成,运行,延迟),而无需编写任何代码。您可以在UI中删除旧记录。
  4. 无限滚动
    • 有时不起作用。必须刷新。
  5. UI进度指示
    • 适合耗时的工作。
  6. 特定作业记录
    • 由于它们是延迟的作业,因此您应该在作业中记录有用的信息,并稍后通过UI检查。
  7. 由Redis提供支持
    • 很有用。当您重新启动node.js应用程序时,所有作业记录仍然存在,并且计划的作业也将执行!
  8. 可选重试
    • 真好
  9. 全文搜索功能
    • 好。
  10. RESTful JSON API
    • 听起来不错,但我从未使用过。

编辑:

  1. kue不是像cron这样的库。
  2. 默认情况下,kue不支持重复运行的作业(例如,每个星期日)。

6
Kue是作业队列,而不是调度程序。
Leonid Beschastny

1
@LeonidBeschastny Kue是一个工作队列。而且它也是一个调度程序,因为它可以“让我调度某些功能在特定时间运行”。
文斯·袁

我以为Kue的工作只能延迟,而不能安排到一定的时间。
Leonid Beschastny 2013年

@LeonidBeschastny你是对的。Kue不提供将作业计划到特定时间的api。但是正如我提到的,“如果要让该作业在特定时间运行,请计算该时间与现在之间的毫秒数。调用job.delay(milliseconds)(文档说是分钟,这是错误的。”)这很容易。
文斯·袁

1
您可以尝试kue-scheduler,它类似于aganda
Fruch '16


8

您可以使用timexe

它使用简单,重量轻,没有依赖关系,语法比cron有所改进,分辨率以毫秒为单位并且可以在浏览器中使用。

安装:

npm install timexe

用:

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

(我是作者)


我可以举个例子吗?
亚历克斯

1
请看一下github上的示例:github.com/paragi/timexe
SimonRigét16年

2

我是node-runnr的权威。它具有创建工作的非常简单的方法。声明时间和间隔也非常简单明了。例如,要每10分钟20秒执行一次作业,

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

每天早上10点和下午3点做工作,

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

就这么简单。有关更多详细信息:https : //github.com/Saquib764/node-runnr




0

这并不适合所有人,但是如果您的应用程序已经设置为通过套接字接收命令,则可以使用netcat通过cron属性发出命令。

echo 'mycommand' | nc -U /tmp/myapp.sock
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.