在 sails.js 开始调度服务,永远从帆中访问所有水线模型

Starting a scheduling service in sails.js with forever from within sails with access to all waterline models

我有一个独立的调度服务设置为每 1 小时执行一些逻辑,我想在 sails 启动后立即用 forever 启动此服务,我不确定什么是最好的方法这样做。

// services/Scheduler.js
sails.load(function() {
  setInterval( logicFn , config.schedulingInterval);
});

Sails 可以在 config.bootstrap 模块中执行 bootstrap 逻辑,我将使用 forever-monitor 节点模块 \

var forever = require('forever-monitor'),
    scheduler = new (forever.Monitor)( schedulerPath, {
      max: 20,
      silent: true,
      args: []
    });

module.exports.bootstrap = function(cb) {
  scheduler.start();
  cb();
};

如果服务因任何原因失败并重新启动,它会再次访问所有水线模型,如何确保它每次都按预期工作?

拜托拜托,请始终分享您的 sails.js 版本号! 这对于使用谷歌搜索的人来说非常重要 questions/answers!

有很多方法可以做到这一点。然而,对于那些想要 "sails.js" 方式的人来说,有更新的 sails.js 版本的钩子。

请参阅 github 中的此问题线程,具体而言,在问题关闭后,一些用户会提供一些非常有用的解决方案。最新由"scott-wyatt"分享,2014年12月28日评论:

https://github.com/balderdashy/sails/issues/2092

正如 brittonjb 在评论中所说,一个简单的解决方案是使用 cron module 进行调度。 您可以指定一个函数,让它在您希望的任何时间间隔调用;这个函数可以在 /config/bootstrap.js 中定义,也可以在其他地方定义(例如 mail.dailyReminders() 如果你有一个带有 dailyReminders 方法的邮件服务);