【问题标题】:Potential Concerns in Stopping Meteor Ungracefully不优雅地停止 Meteor 的潜在问题
【发布时间】:2013-05-10 14:31:30
【问题描述】:

刚刚进入 Meteor,在许多人看来,这似乎是一个很棒的项目。一个潜在的问题(可能不是)是似乎没有meteor stop 或另一种编程方式来优雅地关闭流星。 如果我对此有误,请告诉我!

如果我们使用CTRL-C 中断进程或通过活动监视器将其关闭,是否存在维护数据库完整性的潜在问题(例如)?我们可以采取哪些措施来减少或消除此类问题?

警告:我承认上述问题有些模糊,并且我理解这通常被认为对 Stack 有害,但我希望它们仍然是可以回答的。

谢谢,

【问题讨论】:

  • +1 有趣的问题,我从未想到过,但可能应该有的问题

标签: meteor


【解决方案1】:

看起来确实在进程终止之前进行了清理 (https://github.com/meteor/meteor/blob/master/tools/cleanup.js)。

发送的第一个信号是SIGINT,这是一种要求进程关闭(并给它时间完成其最后一个运行线程)的礼貌方式

由于数据库完整性,mongod 进程还会尝试在关闭之前进行自我清理,并且它有一个恢复机制(从日志文件),可以在强制关闭时快速恢复,同时重新启动。

话虽如此,在一个运行时间较长的线程中间,我不太确定它是允许完成还是立即终止。但是meteor确实试图给它一个机会,首先是优雅的终止,然后将其升级为SIGHUP,最后是SIGTERM(这仍然是一个优雅的终止信号)。流星在任何时候都不会强制或发送 SIGKILL 或 SIGSTOP。

因此,流星应用程序应该不受 Ctrl+C 终止的影响。对于活动监视器终止,它取决于它发送的信号类型(即强制退出或只是退出)

【讨论】:

  • 感谢您链接到特定的 cleanup.js,它看起来也有一个 mongo-exit-codes.js 文件。我想知道是否可以利用它来检查数据库状态。
【解决方案2】:

因此,如果您的 mongodb 是外部管理的,即在部署生产服务器上,meteor 不会像 mongo-runner.js 说明的那样停止它:

// Since it is externally managed, asking it to actually stop would be
// impolite, so our stoppable handle is a noop
if (process.env.MONGO_URL) {
launch_callback();
return handle;
}

【讨论】:

  • 另外在服务器端 javascript 中的 Meteor.publish() 函数中,您需要调用 _this_.onStop(function(){ [your_handle].stop});
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2018-09-27
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
相关资源
最近更新 更多