Создать экспресс-генератор systemd nodejs

У меня есть сервер nodejs, который генерирует с помощью экспресс-генератора. Теперь я пытаюсь создать службу systemd для запуска моего сервера.

[Unit]
Description=Node.js Example Server     

[Service]
ExecStart=/usr/bin/node /opt/nodeserver/server.js
Restart=always
StandardOutput=syslog               
StandardError=syslog                
SyslogIdentifier=nodejs-example
Environment=NODE_ENV=production PORT=1337

[Install]
WantedBy=multi-user.target

Служба не может быть запущена, потому что я не могу запустить сервер с командным узлом server.js. Единственный способ, которым я могу запустить сервер: npm server.js. Как я могу сказать службе запустить сервер с помощью команды npm, а не узла?

1 ответ

Системный может быть иногда проблематичным. Проще написать сценарий инициализации SysV или Upstart, когда вы можете. Я объясняю некоторые из вопросов в этих ответах: [1], [2].

Теперь вы можете написать скрипт запуска, который бы:

  1. измените рабочий каталог на ваше приложение
  2. запустить команду запуска

Например:

#!/bin/sh
cd /your/application/path
npm start

(или же npm server.js или как там ваша команда вместо npm start)

Также может быть полезно установить правильный PATH, если вам это нужно:

#!/bin/sh
PATH="/opt/node/bin:$PATH"
export PATH
cd /your/application/path
npm start

(где /opt/node/bin где твой node а также npm установлены)

Если вы сохраните такой скрипт, как, например, /opt/nodeserver/server.sh тогда вы сможете использовать:

ExecStart=/bin/sh /opt/nodeserver/server.sh

в вашем сценарии systemd (если в systemd больше нет ошибок, которые могли бы вызвать проблемы здесь).

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