У нас есть приложение 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() как часть своего запуска.Ожидается, что родительский процесс завершит работу.когда запуск завершен и все каналы связи настроены.Ребенок продолжает бежать.как основной процесс обслуживания, и менеджер обслуживания будет считать блок запущенным при завершении родительского процесса.