当我关闭运行 mongodb(通过 apt 安装)的 Ubuntu 时,有时 mongodb 似乎没有完全关闭 - 日志文件与健康关闭相匹配,关闭文件,清理日志等,但最终[interruptThread] shutdown: removing fs lock...
不存在,并且(不出所料)mongodb 拒绝在下次启动时启动,抱怨锁文件过时。
在我看来,服务自行退出的超时时间即将到期,因此 mongodb 被强制终止。
有问题的 mongodb 是通过 ssh 隧道同步的副本集的一部分。因此,套接字可能挂起并阻碍了最终清理(包括删除锁定文件)??
我该怎么办?我可以为 mongodb 设置更长的关闭超时时间吗?我可以坚持在 ssh 隧道被终止之前让 mongodb 彻底死机吗?还有其他我遗漏的解释吗?
答案1
确实,服务关闭的时间是有限制的。Ubuntu 使用 upstart 来启动和停止服务,upstart 的默认限制是 5 秒(请参阅有关 kill timeout 的 upstart 文档)。如果您增加该超时时间,可能会解决您的问题。您必须将kill timeout
链接中提到的指令放在 mongodb 的 upstart 配置文件中。在 Ubuntu 12.04 上,此文件位于。您可以在中找到包含该指令/etc/init/mongodb.conf
的 upstart 文件kill timeout
当前 mongodb 源(但由于路径不同,此文件可能无法在您的 Ubuntu 系统上运行。)
即使没有复制,我在 Ubuntu 12.04 上也遇到了同样的问题,并且我kill timeout 300
已经解决了该问题。