首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Systemd节点应用程序启动失败

Systemd节点应用程序启动失败
EN

Stack Overflow用户
提问于 2016-12-23 23:48:13
回答 2查看 1.7K关注 0票数 0

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

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
[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开头,它都会产生错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-23 23:58:19

与流行的误解相反,systemd与传统的Unix init脚本概念有很大的不同。我们将更详细地解释herehere。我注意到这里的很多人都在询问使用systemd运行Node时遇到的问题,他们很少得到任何解决方案。我的建议是使用传统的SysV init脚本或Upstart,这些脚本在发现不能使用systemd时也能正常工作。我从未见过Node应用程序无法轻松地使用Upstart或SysV init脚本运行的情况,但我已经看到了systemd的问题。我听说集群和其他更复杂的部署场景尤其有问题。只要遵循Unix哲学,使用简单的工具就可以完成一件事情,并且做得很好。Init脚本没有那么复杂。

另请参阅:

票数 -1
EN

Stack Overflow用户

发布于 2017-07-30 09:16:26

我有这个问题。在systemd中,我没有使用与本地运行时相同的节点版本。

代码语言:javascript
复制
$ which node
/usr/local/bin/node

/usr/bin/node替换为/usr/local/bin/node (或which node中的等效值,例如在使用nvm时),在ExecStart中为我修复了它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41309028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档