2016-11-29 34 views
0

我有通過express-generator生成的nodejs服務器。 現在我嘗試創建systemd服務來運行我的服務器。創建systemd nodejs express-generator

[Unit] 
Description=Node.js Example Server  

[Service] 
ExecStart=/usr/bin/node /opt/nodeserver/server.js 
Restart=always 
StandardOutput=syslog    
StandardError=syslog     
SyslogIdentifier=nodejs-example 
Environment=NODE_ENV=production PORT=1337 

[Install] 
WantedBy=multi-user.target 

該服務無法運行,因爲我無法運行服務器與命令節點server.js。 我可以運行服務器的唯一方法是:npm server.js。 如何告訴服務器使用npm命令而不是節點運行服務器?

+0

Did [我的回答](http://stackoverflow.com/questions/40861258/create-systemd-nodejs-express-generator/40863613#40863613)有幫助嗎?任何意見? – rsp

回答

0

Systemd有時可能會出現問題。只要有可能,編寫SysV或Upstart init腳本就會變得更加容易。我解釋了這些答案中的一些問題:[1],[2]

現在,你可以做的是寫一個啓動腳本自己會:

  1. 改變工作目錄到你的應用程序
  2. 運行啓動命令

例如:

#!/bin/sh 
cd /your/application/path 
npm start 

(或npm server.js或任何你的命令是instea的npm start d)

這也可能是設定正確的路徑,如果你需要它有用:

#!/bin/sh 
PATH="/opt/node/bin:$PATH" 
export PATH 
cd /your/application/path 
npm start 

(其中/opt/node/bin是你nodenpm的安裝位置)

如果您保存這樣的例如一個腳本/opt/nodeserver/server.sh那麼你應該能夠使用:

ExecStart=/bin/sh /opt/nodeserver/server.sh 

在你的systemd腳本(除非有systemd會在這裏引發的問題更多的陷阱)。