Systemd:mongodb 之后自动启动服务

Systemd:mongodb 之后自动启动服务

ubuntu16.04.1,系统

应用程序依赖于 mongodb。应用程序和 mongodb 均在启动时作为服务启动。app.service包含下一行:

After=network.target mongod.service

不幸的是,应用程序失败了(连接到数据库错误),我猜测是因为 mongodb 需要一些时间来启动并准备好连接(如果我稍后启动该应用程序,一切都正常)。

Type=notify如果 mongodb 向 systemd 发送适当的通知,那么(在[Service]的部分中)似乎mongod.service可以解决问题。但我没有找到有关它的任何文档。

问题是,在 mongodb 准备好接收传入连接后,如何自动启动应用程序。

答案1

为了将来参考,我发现这个解决方案有效:https://gist.github.com/jwilm/5842956#gistcomment-2706797

这样,mongodb 就会阻塞,直到数据库可访问,然后 systemd 才能启动下一个服务。

如果您有依赖于 mongodb 的服务,则配置会稍微困难一些,因为默认的 mongodb 服务在数据库上线之前返回。这可能会导致快速应用程序尝试连接数据库但失败。为防止这种情况,请将以下内容添加到 /etc/mongod.conf

processManagement:
    fork: true

接下来,创建/etc/systemd/system/mongod.service.d/mongod.conf(扩展现有的/lib/systemd/system/mongod.service),内容如下:

[Service]
Type=oneshot
RemainAfterExit=yes

这会导致sudo systemctl start mongod在分叉进程中启动服务器,并且仅在数据库启动并准备好连接后返回。这样,依赖服务仅在数据库处于活动状态后才会被调用。

答案2

我猜这个问题的答案已经在 serverfault 中了。简而言之:也许你应该使用Requires而不是AfterRequires意味着你的服务需要其他服务才能正常工作,而不是应该“在之后启动”。

https://serverfault.com/questions/812584/in-systemd-whats-the-difference-between-after-and-requires

相关内容