我创建了一个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,与最新版本保持同步。
我看不出哪里出错了。如果有人能引导我朝着正确的方向前进,我将非常感激!
谢谢!
答案 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)
我有类似的问题。问题可能是您在网络服务完成启动之前尝试连接。你可以看看这里是否能解决你的问题: