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.js
processo 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=forking
abaixo 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.