Создать экспресс-генератор 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].
Теперь вы можете написать скрипт запуска, который бы:
- измените рабочий каталог на ваше приложение
- запустить команду запуска
Например:
#!/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 больше нет ошибок, которые могли бы вызвать проблемы здесь).