aplicativo nodejs iniciando o serviço systemd usando para sempre

aplicativo nodejs iniciando o serviço systemd usando para sempre

Temos uma aplicação NodeJs chamadaaplicativo.jrodando em uma máquina Linux RHEL. Iniciamos o serviço usando o nópara sempremódulo na linha de comando no diretório em que o aplicativo reside.


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

Isso funciona bem, mas agora gostaríamos de teraplicativo.jsinicialização após a reinicialização do sistema, então criamos umsistemaarquivo de serviço que parece não funcionar.
Eu esperava que alguém pudesse apontar alguns problemas flagrantes que não vejo.

/etc/systemd/system/fulltext.servicearquivo


[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

Obtendo o seguinte erro ao executarinício do texto completo do sistema


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

Responder1

Sei que esta é uma pergunta antiga e o OP provavelmente não precisa mais da resposta. Mas caso alguém se depare com isso como eu...


O processo eterno termina depois de iniciar o node app.jsprocesso real.

Como você não especifica um service Type=, o padrão é "simples" (já que você o possui ExecStart=), o que espera que o processo principal continue em execução. Portanto, quando o processo principal "para sempre" é interrompido, o systemd pensa que falhou, pois não sabe que um processo filho foi gerado.

Tente adicionar Type=forkingabaixo de [Service].

Enquanto oDocumentação systemd.serviceafirma:

Se definido como forking, espera-se que o processo configurado com ExecStart= chame fork() como parte de sua inicialização.Espera-se que o processo pai saiaquando a inicialização for concluída e todos os canais de comunicação estiverem configurados.A criança continua correndocomo o processo de serviço principal, e o gerente de serviço considerará a unidade iniciada quando o processo pai for encerrado.

informação relacionada