Node 服务器的 Systemd 服务无法连接到 MongoDB

Systemd service for Node server can't connect to MongoDB

我在系统启动时为 运行 Mongodb 创建了一个 Systemd 单元文件。在 mongodb 启动后,我还在启动时为 运行 我的节点应用程序创建了一个 systemd 服务。 mongodb 的服务工作正常,但出于某种原因,我的 Node 应用程序服务尝试 运行,然后给出错误:"MongoError: failed to connect to server [localhost:27017] on first connect"。如果我使用 $systemctl start mongodb 启动 mongodb 服务,然后使用 $/usr/bin/node /node_app_slot/server.js 启动我的 Node 应用程序,它似乎工作正常。所以问题似乎出在我的节点服务器的 systemd 单元文件上。

我将其用于 mongodb systemd 服务 https://gist.github.com/jwilm/5842956

这是我的 node_server.service:

[Unit]
Wants=network.target mongodb.service
After=network.target mongodb.service

[Service]
ExecStart=/usr/bin/node /node_app_slot/server.js

[Install]
WantedBy=multi-user.target

我正在使用 hostapd 在接入点模式下设置的英特尔爱迪生上执行此操作。 OS 是 Yocto,并且是最新版本。

我看不出哪里出错了。如果有人能指导我正确的方向,我将非常感激!

谢谢!

您的 systemd 语法是正确的,尽管您可能想使用 network-online.target 而不是 network.target

要考虑的解决方法是在 MongoDB 应用程序启动前增加 5 秒的睡眠时间。由于这是在服务器启动时发生的,额外的 5 秒不太可能产生实际差异,但可能会解决您的问题。

 ExecStartPre=/bin/sleep 5

奇怪的是,当 MongoDB 附带他们自己的 systemd 服务文件时,您是 copy/pasting 来自互联网的 MongoDB systemd 服务文件。您没有提到您的 OS 版本、systemd 版本或 MongoDB 版本,但如果不使用 [=24] 版本,我仍然建议参考官方 MongoDB systemd 配置文件=] 随文件一起提供。

我有类似的问题。问题可能是您在网络服务完成启动之前尝试连接。你可以看看这里是否解决了你的问题:

https://unix.stackexchange.com/questions/126009/cause-a-script-to-execute-after-networking-has-started