4

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

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

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

谢谢,

4

2 回答 2

1

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

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

凭借数据库完整性,mongod 进程还尝试在关闭之前进行自我清理,并且它具有快速恢复的恢复机制(来自日志文件),同时在强制关闭时重新启动。

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

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

于 2013-05-09T23:12:55.743 回答
0

因此,要为此添加一些关闭,如果您的 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;
}
于 2013-05-10T06:31:30.887 回答