Сервис systemd неактивен (мертв) - PullRequest
0 голосов
/ 22 февраля 2019
[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 или я должен использовать «разветвление»?

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

1 Ответ

0 голосов
/ 22 февраля 2019

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

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

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

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

...