Приложение Systemd node не запускается

У меня есть приложение узла, которое я пытаюсь добавить в качестве службы, приложение работает нормально, если я иду в каталог, где он установлен, и делаю 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 ответа

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

$ which node
/usr/local/bin/node

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

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

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

Другие вопросы по тегам