Ubuntu Nodejs systemd 服务失败

Ubuntu Nodejs systemd service failure

我在 Ubuntu 16.04 VPS 上安装了当前最新的节点 v8.6。 节点 app.js 在 var/www/back-end.

现在我正在尝试 运行 它作为系统服务,但是失败了:

Process: 8583 ExecStart=/usr/bin/nodejs /var/www/back-end/app.js (code=exited, status=1/FAILURE)

在其他问题中,我读到节点可执行文件的路径可能是错误的,但我检查了 'which nodejs' 并返回了“/usr/bin/nodejs”。我还检查了 var/www/back-end 的权限,它们被正确设置为管理员。

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

知道哪里出了问题吗?或者是否有一些日志文件,我可以在其中找到更好的错误,以便我知道是什么原因造成的?

这是我的 .service 文件:

[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

您没有提到当 运行 作为 admin 用户从 CLI 中正确测试命令 运行 时:

 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.

所述

最后,您的输出表明该脚本确实 启动了 但随后退出了,因此您应该能够向您的脚本添加诊断以更好地理解它为什么没有启动。根据您的配置,您已将脚本的输出发送到系统日志,您应该在那里查找日志。您可以在脚本启动后立即添加一个 console.log(),并继续添加更多以确认它在哪一步结束。

此外,您这里有一个错字:WantedBy=muti-user.target。那应该是"multi-user.target"。

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