【问题标题】:Node.js script failed to start with systemctlNode.js 脚本无法以 systemctl 启动
【发布时间】:2017-01-19 10:00:31
【问题描述】:

我需要使用 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.

这个错误到底是关于什么的?我错过了什么吗?

【问题讨论】:

    标签: node.js linux debian systemctl


    【解决方案1】:

    我认为这不是您启动节点应用程序的方式。您只是在此处指定 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
    

    【讨论】:

    • 收到这样的通知:可执行路径不是绝对的。我的节点也在路径中
    • 好吧,我把它改成了ExecStart=/usr/local/bin/node /var/www/laporan/nodeserver/server.js,它跑得像地狱一样。感谢您的回答!
    • 请注意,在某些系统中,node 位于 /usr/bin/node,因此测试运行完整路径(即 /usr/bin/node /dir/yourapp.js 或 /usr/local /bin/node /dir/yourapp.js) 看看哪一个适合你。
    【解决方案2】:

    为了清楚说明您放置 node 可执行路径的错误是错误的。 要获得正确的路径,您可以使用

    $ which node // /usr/bin/node
    

    在我的情况下,它不同,我将 /usr/bin/node 作为路径,所以在你 ExecStart 从命令行复制节点路径

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

    【讨论】:

      猜你喜欢
      • 2020-08-02
      • 2023-01-28
      • 2019-03-11
      • 2020-01-04
      • 1970-01-01
      • 2016-02-01
      • 2023-03-15
      • 2011-10-09
      • 2018-07-29
      相关资源
      最近更新 更多