是否有node.js的作业调度程序库?

JtR*_*JtR 154 scheduling node.js

是否有一些类似cron的库可以让我安排一些功能在某个时间运行(例如15:30,而不是x小时从现在开始等)?如果没有这种库应该如何实现?我应该只设置每秒调用一次回调并检查时间并开始计划当时的工作或什么?

JtR*_*JtR 121

node-cron正是我所描述的

  • @Ajar不,在nodejs进程终止后,所有作业都将丢失.node-cron没有附带cron表 (5认同)
  • 你在app.js/scripts.js中写了cronjob声明吗? (4认同)
  • 我想是的@ChrisC。如果我不使用任何框架,我会在“app.js”中声明 crons。在 `sails.js` 中,我在 `bootstrap` 中执行此操作 (2认同)
  • @arVan如果你感兴趣的话,我实际上开始研究`agenda`来增加Waterline支持:https://github.com/mikermcneil/agenda(字面意思是刚刚开始 - 下周应该有一些可用的进展) (2认同)

Uni*_*ech 44

node- schedule用于Node的类似cron和非cron的作业调度程序.

  • node-schedule不提供持久性.根据文档:`请注意,节点计划是为进程内调度而设计的,即只要脚本运行,计划作业就会触发,并且执行完成后计划将消失. (5认同)
  • 这设法避免了有时令人困惑的crontab语法,并且在我看来更具可读性. (2认同)

Fiz*_*han 33

议程是节点的轻量级作业调度.这会对你有所帮助.

  • 澄清一下,作为议程的作者,它实际上根本不是基于node-cron ... (49认同)
  • 我发现`议程'有不一致的行为,不会建议使用它.检查未解决的问题和PR以进行自己的通话. (4认同)
  • 请注意,议程尚未准备就绪。它有[内存泄漏](https://github.com/agenda/agenda/issues/129)问题,并检查是否有问题。仍然有很多错误。准备就绪时看起来很有希望。 (2认同)

Xåp*_* - 15

later.js是一个非常好的JavaScript"调度程序"库.可以在Node.js或Web浏览器中运行.

  • 我在这个帖子中尝试了一些建议,但是我发现这个模块是*用户最友好的*和直接合作...谢谢! (3认同)

Vin*_*uan 12

我正在使用kue:https://github.com/learnboost/kue.这很不错.

官方功能和我的意见:

  1. 推迟工作.
    • 如果要让作业在特定时间运行,请计算该时间与现在之间的毫秒数.调用job.delay(毫秒)(文档说分钟,这是错误的.)不要忘记添加"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不支持重复运行的作业(例如每个星期日).

  • Kue是一个作业队列,而不是一个调度程序. (6认同)

Bla*_*ago 9

node-crontab允许您从node.js编辑系统cron作业.使用此库将允许您在主进程终止后运行程序.免责声明:我是开发人员.

  • 许可证现在是麻省理工学院 (5认同)

Sim*_*gét 8

你可以使用timexe

它的好处是它易于使用,重量轻,没有依赖性,在cron上具有改进的语法,以毫秒为单位的分辨率以及在浏览器中工作.

安装:

npm install timexe
Run Code Online (Sandbox Code Playgroud)

使用:

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

(我是作者)