Node.js脚本无法以systemctl启动

时间:2016-09-12 01:28:53

标签: node.js linux debian systemctl

我需要使用systemctl从远程计算机自动运行node.js脚本。

我已经创建了一个.service文件并将其放入/etc/systemd/system/。这是.service文件:

[Unit]
Description=laporan

[Service]
ExecStart=/var/www/laporan/nodeserver/server.js
Restart=always
User=nobody
Group=root
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/laporan/nodeserver

[Install]
WantedBy=multi-user.target

但每次我尝试启动该服务时,都会返回如下错误(systemctl status laporan的输出):

● laporan.service - laporan
   Loaded: loaded (/etc/systemd/system/laporan.service; enabled)
   Active: failed (Result: start-limit) since Mon 2016-09-12 09:15:06 WITA; 11min ago
  Process: 121690 ExecStart=/var/www/laporan/nodeserver/server.js (code=exited, status=203/EXEC)
 Main PID: 121690 (code=exited, status=203/EXEC)

Sep 12 09:15:05 kominfomdc systemd[1]: Unit laporan.service entered failed state.
Sep 12 09:15:06 kominfomdc systemd[1]: laporan.service start request repeated too quickly, refusing to start.
Sep 12 09:15:06 kominfomdc systemd[1]: Failed to start laporan.
Sep 12 09:15:06 kominfomdc systemd[1]: Unit laporan.service entered failed state.

这个错误究竟是什么?我错过了什么吗?

2 个答案:

答案 0 :(得分:11)

我不认为您是如何启动节点应用的。您只需在此处指定JavaScript文件:

ExecStart=/var/www/laporan/nodeserver/server.js

如果节点在路径中,您还需要指定节点可执行文件,如下所示。

ExecStart= node /var/www/laporan/nodeserver/server.js

但是,正如您已经注意到的那样,您必须填写可执行文件的完整路径:

ExecStart=/usr/local/bin/node /var/www/laporan/nodeserver/server.js

答案 1 :(得分:2)

为弄清错误,您将 node 可执行文件路径设置为错误。 要获得正确的路径,您可以使用

$ which node // /usr/bin/node

就我而言,它的不同之处是我得到了 / usr / bin / node 作为路径,所以在你 ExecStart 从命令行复制节点路径

ExecStart=/usr/bin/node /var/www/laporan/nodeserver/server.js