创建systemd nodejs express-generator

时间:2016-11-29 08:42:38

标签: node.js express

我有通过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命令运行服务器而不是节点?

1 个答案:

答案 0 :(得分:0)

Systemd有时会出现问题。只要有可能,编写SysV或Upstart init脚本就更容易了。我在这些答案中解释了一些问题:[1][2]

现在,您可以做的是自己编写一个启动脚本:

  1. 将工作目录更改为您的应用程序
  2. 运行启动命令
  3. 例如:

    #!/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/binnodenpm的安装位置

    如果您保存此类脚本,例如/opt/nodeserver/server.sh然后您应该可以使用:

    ExecStart=/bin/sh /opt/nodeserver/server.sh
    
    你的systemd脚本中的

    (除非systemd中有更多的问题导致这里出现问题)。