我有通过express-generator生成的nodejs服务器。 现在我尝试创建systemd服务来运行我的服务器。
[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
服务无法运行,因为我无法使用命令node server.js运行服务器。 我可以运行服务器的唯一方法:npm server.js。 如何告诉服务使用npm命令运行服务器而不是节点?
答案 0 :(得分:0)
Systemd有时会出现问题。只要有可能,编写SysV或Upstart init脚本就更容易了。我在这些答案中解释了一些问题:[1],[2]。
现在,您可以做的是自己编写一个启动脚本:
例如:
#!/bin/sh
cd /your/application/path
npm start
(或npm server.js
或您的命令而不是npm start
)
如果需要,设置正确的PATH可能也很有用:
#!/bin/sh
PATH="/opt/node/bin:$PATH"
export PATH
cd /your/application/path
npm start
(其中/opt/node/bin
是node
和npm
的安装位置
如果您保存此类脚本,例如/opt/nodeserver/server.sh
然后您应该可以使用:
ExecStart=/bin/sh /opt/nodeserver/server.sh
你的systemd脚本中的(除非systemd中有更多的问题导致这里出现问题)。