Назад | Перейти на главную страницу

Как настроить служебный модуль Systemd для запуска приложения Node с «npm start» вместо «app.js»

Окружающая среда: CentOS 8, Node.js, цифровая капля океана

Моя установка Systemd запускает приложение узла с помощью следующей команды. Работает как положено.

$ sudo systemctl start myapp

Файл 1: /etc/systemd/system/myapp.service

[Unit]
Description = My App 
After = network.target

[Service]
ExecStart = /root/start-myapp.sh
Restart=on-failure

[Install]
WantedBy = multi-user.target

Файл 2: /root/start-myapp.sh

#!/bin/sh
/usr/bin/node /srv/myapp/app.js

Однако, когда я не использую Systemd, я обычно запускаю свое приложение с помощью Node Package Manager с помощью команды npm start. Я бы предпочел, чтобы модуль Systemd также запускал приложение с npm start.

К сожалению, это вызвало ошибку, когда я изменил app.js к npm start в /root/start-myapp.sh,

/usr/bin/node /srv/myapp/npm start

Я сделал еще одну попытку, переключив путь с node к npm но возникла та же ошибка.

/usr/bin/npm /srv/myapp/npm start

Вопрос: Как получить файл модуля Systemd для запуска приложения с помощью команды npm start?

Я запускаю аналогичную установку в Debian, и мой сервис выглядит так:

...

[Service]
Environment=NODE_PORT=3000
Type=simple
User=www-data
Restart=on-failure
WorkingDirectory=/var/www/<your-code-directory>
ExecStart=npm start

...

Надеюсь это поможет!