2017-03-19 122 views
0

我已经创建了一个Systemd单元文件来在系统启动时运行Mongodb。在mongodb启动后,我还创建了一个systemd服务来在启动时运行我的节点应用程序。 mongodb的服务工作正常,但由于某种原因,我为Node应用程序的服务尝试运行,然后出现错误:“MongoError:第一次连接时无法连接到服务器[localhost:27017]”。如果我使用$systemctl start mongodb启动mongodb服务,然后使用$/usr/bin/node /node_app_slot/server.js启动我的Node应用程序,它似乎工作正常。所以这个问题似乎与我的节点服务器的systemd单元文件有关。节点服务器的系统服务无法连接到MongoDB

我用这对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 

IM在英特尔爱迪生这样使用hostapd成立于接入点模式。操作系统是Yocto,并且与最新版本保持同步。

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

谢谢!

+0

我不知道这可能需要一段时间MongoDB服务器真正开始接受传入的连接。你可以在某处插入睡觉,看看它是否会在10秒左右后接受它们? – robertklep

+0

你看看你的mongodb日志吗?如果mongodb准备好接受连接,您必须看到您的nodejs请求。 – NotBad4U

+0

此外,重试连接而不是失败也许是有意义的(也许通过指数退避连接尝试) – nir0s

回答

0

您的systemd语法无误,但您可能要使用network-online.target而不是network.target

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

ExecStartPre=/bin/sleep 5 

奇怪的是,你是复制/从互联网上粘贴的MongoDB systemd服务文件时,MongoDB中附带自己的systemd服务文件。您没有提及您的操作系统版本,系统版本或MongoDB版本,但如果不使用随文件一起提供的MongoDB版本,我仍然会建议参考官方的MongoDB systemd配置文件。

相关问题