2016-12-23 4 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 

Я попытался запустить процесс и как обычный пользователь, и корень, и он прекрасно работает .. но независимо от того, что Я пытаюсь, чтобы он дал ошибки, если началось с systemd.

ответ

1

Вопреки распространенному заблуждению система systemd сильно отличается от традиционной концепции инициализации Unix. Это объясняется более подробно here и here. Я заметил, что многие люди спрашивают о проблемах с запуском Node с systemd, и они редко получают какие-либо решения. Моя рекомендация заключалась бы в использовании традиционных скриптов SysV init или Upstart, которые также работают без сюрпризов, когда вы видите, что вы не можете что-то сделать с systemd. Я никогда не видел ситуаций, когда приложение Node не могло быть легко запущено с помощью скриптов Upstart или SysV, но я видел проблемы с systemd. Я слышал, что это особенно проблематично для кластеризации и других более сложных сценариев развертывания. Просто следуйте философии Unix и используйте простые инструменты, которые делают одно и делают это хорошо. Инициированные скрипты не так уж сложны.

Смотрите также:

+0

«Просто следуйте философии Unix и используйте простые инструменты, которые делают одно и делают это хорошо». Аминь. –

0

Я имел эту проблему. Я не использовал ту же версию узла в Systemd

$ which node 
/usr/local/bin/node 

Замена /usr/bin/node с /usr/local/bin/node в ExecStart установил ее для меня.

Смежные вопросы