2017-10-06 176 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

這是非常有幫助的,我沒有注意到應用程序確實已經開始,所以我完全看錯了方向。事實證明這是劇本本身的一個錯誤。 –