我有一个节点应用程序,我试图添加作为服务,应用程序工作正常,如果我去的目录,它的安装和做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
我试图以普通用户和根用户身份运行进程,它工作正常..但不pipe我尝试它会给出错误,如果开始与systemd。
与流行的误解相反,systemd与传统的Unix初始化脚本的概念非常不同。 这里和这里详细解释。 我注意到这里有很多人在询问有关systemd运行Node的问题,他们很少得到任何解决方案。 我的建议是使用传统的SysV初始化脚本或Upstart,当你发现你不能用systemd做任何事情的时候,这也是毫无意外的。 我从来没有见过使用Upstart或SysV初始化脚本无法轻松运行Node应用程序的情况,但是我发现Systemd有问题。 我听说集群和其他更复杂的部署方案尤其成问题。 只要遵循Unix的哲学,并使用简单的工具来做一件事,做得很好。 初始化脚本并不复杂。
也可以看看:
我有这个问题。 我在systemd中没有使用相同的节点版本
$ which node /usr/local/bin/node
在ExecStart
中用/usr/local/bin/node
替换/usr/bin/node
为我解决了这个问题。