2017-10-06 149 views
0

我在Ubuntu 16.04 VPS上安装了当前最新的节点v8.6。 节点app.js位于var/www/back-end中。Ubuntu Nodejs systemd服务失败

现在我试图运行它作为一个systemd服务,但失败:

Process: 8583 ExecStart=/usr/bin/nodejs /var/www/back-end/app.js (code=exited, status=1/FAILURE) 
在我读到的路径,节点可执行也许是错误的其他问题

,但我“这的NodeJS检查',并返回'/ usr/bin/nodejs'。我还检查了var/www/back-end的权限,并将它们正确设置为admin。

在另一个问题中,我读了apt-get因为冲突而称它为nodejs,并且应该创建一个符号链接,但是我并不确信。我应该注意到,由于它的功能,我需要最新版本的节点,所以降级不是一种选择。

任何想法可能是错误的?或者是有一些日志文件,我可以找到一个更好的错误,所以我知道是什么造成这种情况?

这是我的。服务文件:

[Unit] 
Description=Node_API 
After=mongodb.service 

[Service] 
ExecStart=/usr/bin/nodejs /var/www/back-end/app.js 
Restart=always 
RestartSec=5 
StandardOutput=syslog 
StandardError=syslog 
SyslogIdentifier=nodeapi 
User=admin 
Group=admin 
Environment=PATH=/usr/bin:/usr/local/bin 
Environment=NODE_ENV=production PORT=3000 
WorkingDirectory=/var/www/back-end 

[Install] 
WantedBy=muti-user.target 

回答

2

你没有提到的测试是从CLI作为admin用户运行时的命令正确运行:

cd /var/www/back-end && PATH=/usr/bin:/usr/local/bin NODE_ENV=production PORT=3000 /usr/bin/nodejs /var/www/back-end/app.js 

你也没”不要提及/ var /和/ www的父指导的权限,只是脚本本身。这些还需要允许admin用户具有execute权限,如更多here所解释的。

最后,您的输出结果表明脚本没有开始但之后退出,所以您应该有能力将诊断程序添加到您的脚本以更好地理解为什么它不会启动。根据您的配置,您已将脚本的输出发送到syslog,您应该在那里查找日志。脚本启动后,您可以立即添加一个console.log(),并继续添加更多以确认它将在哪一步骤死去。

另外,这里有一个错字:WantedBy=muti-user.target。这应该是“multi-user.target”。

您还可以使用systemd-analyze verify /path/to/your/file.service来检查文件的语法正确性。

+0

这是非常有帮助的,我没有注意到应用程序确实已经开始,所以我完全看错了方向。事实证明这是剧本本身的一个错误。 –