служба systemd неактивна (мертва)

[Service]
Type = forking
PIDFile = /var/run/learninglocker.pid
ExecStart = /usr/bin/npm  start
WorkingDirectory = /opt/learninglocker
User = root
Group = root
EnvironmentFile = /opt/learninglocker/environment
StandardOutput = syslog
StandardError = syslog
SyslogIdentifier = learninglocker
LimitCORE = infinity
LimitNOFILE = infinity
LimitNPROC = infinity
TimeoutStartSec = "2min 30s"

[Unit]
After = network.target

[Install]
WantedBy = multi-user.target

Это узловое приложение.

Когда я запускаю «npm start», он запускается и запускает четыре разных процесса. Но когда я запускаю «systemctl start learninglocker.service», он работает в течение нескольких секунд [т.е. активен (работает)] и терпит неудачу, и снова четыре процесса отстают.

Мой вопрос: это нормально, если я использую Type = Simple или я должен использовать «разветвление»?

При использовании типа «разветвление» служба получает «сбой» без сообщения об ошибке.


person Balasekhar Nelli    schedule 22.02.2019    source источник


Ответы (1)


Вы можете найти здесь разницу между Simple, Forking и другими вариантами запуска Systemd в этом посте: https://superuser.com/questions/1274901/systemd-forking-vs-simple/1274913

Как правило, вам нужно использовать simple, если ваш скрипт запуска блокируется, и forking, если ваш скрипт запуска разветвляется без помощи systemd (это может иметь место для вас с запуском npm).

Кроме того, вам, возможно, придется добавить «RemainAfterExit=true» в свой дескриптор службы, чтобы systemd считал, что служба все еще работает. Вам также необходимо определить сценарий ExecStop, чтобы systemd знал, как остановить вашу службу.

Вы также можете обратиться к этому разделу, чтобы узнать, как определить сценарий запуска systemd для узла js.

person Hichem BOUSSETTA    schedule 22.02.2019