2016-12-23 8 views
0

私はサービスとして追加しようとしているノードアプリケーションを持っていますが、インストールされているディレクトリに移動すればアプリケーションはうまく動作します。node start.jsしかし、ときにsystemctl start appはハングしますその後、journalctl -u darknetショー、数分間:Systemdノードアプリケーションの起動に失敗しました

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で起動するとエラーになります。

答えて

1

よくある誤解とは対照的に、systemdは従来のUnixのinitスクリプトの概念とは非常に異なっています。これは、より詳細にはherehereで説明されています。私は、ここでは多くの人がsystemdを使ってNodeを実行する際の問題を尋ねており、ほとんど解決策を得られないことに気付きました。私のお勧めは、従来のSysV initスクリプトやUpstartを使うことです。これはsystemdで何かできないことがわかっても驚きはありません。 UpstartやSysVのinitスクリプトでNodeアプリケーションを簡単に実行できない状況を見たことはありませんが、systemdの問題があります。クラスタリングや他のより複雑な展開シナリオでは特に問題があると聞いています。 Unixの哲学に従って、一つのことをしてうまくやる簡単なツールを使うだけです。 Initスクリプトはそれほど複雑ではありません。

も参照してください:

+0

「Unixの哲学に従って、1つのことを行い、うまくいく簡単なツールを使用するだけです」アーメン。 –

0

私はこの問題を抱えていました。私は私のためにそれを固定ExecStart/usr/local/bin/node/usr/bin/nodeの交換にsystemd

$ which node 
/usr/local/bin/node 

に同じノードのバージョンを使用していませんでした。

関連する問題