Systemd节点应用程序无法启动

时间:2016-12-23 23:48:13

标签: node.js linux systemd

我有一个节点应用,我试图添加为服务,如果我去安装它的目录,该应用程序工作正常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启动都会出错。

2 个答案:

答案 0 :(得分:1)

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

另见:

答案 1 :(得分:0)

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

$ which node
/usr/local/bin/node

/usr/bin/node /usr/local/bin/node替换ExecStart为我修复了newBranch