Node.js 脚本无法使用 systemctl 启动
Node.js script failed to start with 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
但每次我尝试启动该服务时,它 returns 如下错误(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.
这个错误到底是关于什么的?我错过了什么吗?
我认为这不是启动节点应用程序的方式。您只是在此处指定 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
为了清楚说明您放置的 node 可执行路径是错误的。
要获得正确的路径,您可以使用
$ which node // /usr/bin/node
在我的情况下它不同我得到 /usr/bin/node 作为路径所以在你 ExecStart
从命令行复制节点路径
ExecStart=/usr/bin/node /var/www/laporan/nodeserver/server.js
我需要使用 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
但每次我尝试启动该服务时,它 returns 如下错误(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.
这个错误到底是关于什么的?我错过了什么吗?
我认为这不是启动节点应用程序的方式。您只是在此处指定 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
为了清楚说明您放置的 node 可执行路径是错误的。 要获得正确的路径,您可以使用
$ which node // /usr/bin/node
在我的情况下它不同我得到 /usr/bin/node 作为路径所以在你 ExecStart 从命令行复制节点路径
ExecStart=/usr/bin/node /var/www/laporan/nodeserver/server.js