приложение nodejs запускает службу systemd, используя forever

приложение nodejs запускает службу systemd, используя forever

У нас есть приложение NodeJs, которое называетсяприложение.jзапущен на машине Linux RHEL. Мы запускаем службу с помощью узланавсегдамодуль в командной строке в каталоге, где находится приложение.


> cd /usr/app/dir
> forever start app.js

Это работает отлично, но теперь нам хотелось бы иметьприложение.jsзапуск после перезагрузки системы, поэтому мы создалисистемдфайл службы, который, похоже, не работает.
Я надеялся, что кто-то укажет на некоторые явные проблемы, которых я не вижу.

/etc/systemd/system/fulltext.serviceфайл


[Unit]
Description=FullText Server NodeJS Script app.js
After=network.target

[Service]
Environment="NODE_ENV=lint"
Environment="PATH=/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/slsuser/.local/bin:/home/slsuser/bin"
WorkingDirectory=/usr/share/eBSE/current/
ExecStart=/usr/bin/forever start  /usr/app/dir/app.js
ExecStop=/usr/bin/forever  stop   /usr/app/dir/app.js
User=root
Group=root

[Install]
WantedBy=multi-user.target

При выполнении возникает следующая ошибкасистемный полнотекстовый запуск


fulltext.service - FullText Server NodeJS Script app.js
   Loaded: loaded (/etc/systemd/system/fulltext.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Oct 30 17:07:21 edc-v-slsftx01i04 forever[23421]:     uid  command       script                         forever pid   id logfile                 uptime
Oct 30 17:07:21 edc-v-slsftx01i04 forever[23421]: [0] gMOv /usr/bin/node /usr/app/dir/app.js 23415   23427    /root/.forever/gMOv.log 0:0:0:0.59
Oct 30 17:08:00 edc-v-slsftx01i04 systemd[1]: Started FullText Server NodeJS Script app.js.
Oct 30 17:08:00 edc-v-slsftx01i04 systemd[1]: Starting FullText Server NodeJS Script app.js...
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23514]: warn:    --minUptime not set. Defaulting to: 1000ms
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23514]: warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23514]: info:    Forever processing file: /usr/app/dir/app.js
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23530]: info:    Forever stopped process:
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23530]:     uid  command       script                         forever pid   id logfile                 uptime
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23530]: [0] dX9T /usr/bin/node /usr/app/dir/app.js 23524   23536    /root/.forever/dX9T.log 0:0:0:0.53

решение1

Я понимаю, что это старый вопрос, и автору, вероятно, больше не нужен ответ. Но на всякий случай, если кто-то еще наткнется на это, как я...


Процесс forever завершается после запуска фактического node app.jsпроцесса.

Поскольку вы не указываете службу Type=, то по умолчанию используется "simple" (поскольку у вас есть ExecStart=), что предполагает, что основной процесс продолжит работу. Поэтому, когда основной "вечный" процесс прекращает работу, systemd считает, что он потерпел неудачу, поскольку он не знает, что был порожден дочерний процесс.

Попробуйте добавить Type=forkingпод [Service].

Какsystemd.service документациясостояния:

Если задано разветвление, ожидается, что процесс, настроенный с помощью ExecStart=, вызовет fork() как часть своего запуска.Ожидается, что родительский процесс завершит работу.когда запуск завершен и все каналы связи настроены.Ребенок продолжает бежать.как основной процесс обслуживания, и менеджер обслуживания будет считать блок запущенным при завершении родительского процесса.

Связанный контент