Node服务器的系统服务无法连接到MongoDB

时间:2017-03-19 13:28:49

标签: node.js mongodb boot systemd intel-edison

我创建了一个Systemd单元文件,用于在系统启动时运行Mongodb。我还创建了一个systemd服务,在mongodb启动后在启动时运行我的节点应用程序。 mongodb的服务工作正常,但由于某种原因我的Node应用程序的服务尝试运行然后给出错误:“MongoError:在第一次连接时无法连接到服务器[localhost:27017]”。如果我使用$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在Access Point模式下设置的intel edison上执行此操作。该操作系统是Yocto,与最新版本保持同步。

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

谢谢!

2 个答案:

答案 0 :(得分:0)

您的systemd语法是正确的,但您可能希望使用network-online.target代替network.target

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

 ExecStartPre=/bin/sleep 5

奇怪的是,当MongoDB附带自己的systemd服务文件时,您正在从Internet复制/粘贴MongoDB systemd服务文件。您没有提及您的操作系统版本,systemd版本或MongoDB版本,但如果不使用随文件提供的MongoDB版本,我仍会建议引用官方MongoDB systemd配置文件。

答案 1 :(得分:0)

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

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