【问题标题】:Systemd node app failing to startSystemd 节点应用程序无法启动
【发布时间】:2016-12-23 23:48:13
【问题描述】:

我有一个节点应用程序,我正在尝试将其添加为服务,如果我转到安装它的目录并执行node start.js,该应用程序工作正常,但是当我执行systemctl start app 时,它只会挂起一段时间几分钟后journalctl -u darknet 显示:

Dec 24 01:46:33 Skynet systemd[1]: Started darknet.
Dec 24 01:46:33 Skynet systemd[1]: Starting darknet...
Dec 24 01:46:34 Skynet darknet[32246]: module.js:434
Dec 24 01:46:34 Skynet darknet[32246]: return process.dlopen(module, path._makeLong(filename));
Dec 24 01:46:34 Skynet darknet[32246]: ^
Dec 24 01:46:34 Skynet darknet[32246]: Error: Module version mismatch. Expected 46, got 51.
Dec 24 01:46:34 Skynet darknet[32246]: at Error (native)
Dec 24 01:46:34 Skynet darknet[32246]: at Object.Module._extensions..node (module.js:434:18)
Dec 24 01:46:34 Skynet darknet[32246]: at Module.load (module.js:343:32)
Dec 24 01:46:34 Skynet darknet[32246]: at Function.Module._load (module.js:300:12)
Dec 24 01:46:34 Skynet darknet[32246]: at Module.require (module.js:353:17)
Dec 24 01:46:34 Skynet systemd[1]: darknet.service: main process exited, code=exited, status=1/FAILURE
Dec 24 01:46:34 Skynet systemd[1]: Unit darknet.service entered failed state.
Dec 24 01:46:34 Skynet systemd[1]: darknet.service failed.

这是我的 .service 文件:

[Unit]
Description=darknet
After=network.target

[Service]
ExecStart=/usr/bin/node /home/botty/Darknet/start.js
Restart=always
RestartSec=180
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=darknet
User=botty
Group=botty
Environment=NODE_ENV=production
WorkingDirectory=/home/botty/Darknet

[Install]
WantedBy=multi-user.target

我尝试以普通用户和 root 用户身份运行该进程,它运行良好.. 但无论我尝试什么,如果使用 systemd 启动它都会出错。

【问题讨论】:

    标签: node.js linux systemd


    【解决方案1】:

    我遇到了这个问题。我没有在 systemd 中使用相同的节点版本

    $ which node
    /usr/local/bin/node
    

    在ExecStart 中将/usr/bin/node 替换为/usr/local/bin/node 为我修复了它。

    【讨论】:

    • 我可以吻你!
    【解决方案2】:

    与流行的误解相反,systemd 与传统的 Unix 初始化脚本概念有很大不同。 here 和 here 对此进行了更详细的解释。我注意到这里的很多人都在询问使用 systemd 运行 Node 的问题,但他们很少得到任何解决方案。我的建议是使用传统的 SysV 初始化脚本或 Upstart,当您发现无法使用 systemd 做某事时,它们也能毫无意外地工作。我从未见过无法使用 Upstart 或 SysV 初始化脚本轻松运行 Node 应用程序的情况,但我发现 systemd 存在问题。我听说集群和其他更复杂的部署场景尤其成问题。只需遵循 Unix 哲学并使用简单的工具来做一件事并做好。初始化脚本没那么复杂。

    另见:

    【讨论】:

    • “只要遵循 Unix 哲学,使用简单的工具做一件事并做好。”阿门。
    • 这是对systemd的看法;它没有回答问题。
    • “我从未见过无法使用 Upstart 轻松运行 Node 应用程序的情况”...欢迎来到我目前的情况,显然 upstart 不再通过 yum 在 Amazon Linux AMI EC2 上可用.
    • @ocramot 是的,很遗憾它不再可用 - 正是因为我以前从未遇到过任何问题(当然,当它可用时)。
    • @rsp 知道为什么它被删除了吗?我在网上找不到任何确切的信息。和任何解决方法?我昨天最终使它与系统一起工作,但仍然......
    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多