Tenemos una aplicación NodeJs llamadaaplicación.jejecutándose en una máquina Linux RHEL. Iniciamos el servicio usando el nodo.para siempremódulo en la línea de comando en el directorio donde reside la aplicación.
> cd /usr/app/dir
> forever start app.js
Esto funciona bien, pero ahora nos gustaría teneraplicación.jsinicio después del reinicio del sistema, por lo que hemos creado unsistemadarchivo de servicio que no parece funcionar.
Esperaba que alguien pudiera señalar algunos problemas flagrantes que no veo.
/etc/systemd/system/fulltext.servicioarchivo
[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
Obteniendo el siguiente error al ejecutarinicio de texto completo del 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
Respuesta1
Me doy cuenta de que esta es una vieja pregunta y el OP probablemente ya no necesite la respuesta. Pero en caso de que alguien más se encuentre con esto como lo hice yo...
El proceso permanente sale después de iniciar el node app.js
proceso real.
Dado que no especifica un servicio Type=
, el valor predeterminado es "simple" (ya que tiene ExecStart=
), lo que espera que el proceso principal continúe ejecutándose. Entonces, cuando el proceso principal "para siempre" cae, systemd piensa que ha fallado, ya que no se da cuenta de que se ha generado un proceso hijo.
Intente agregar Type=forking
debajo [Service]
.
como eldocumentación de systemd.serviceestados:
Si se configura en bifurcación, se espera que el proceso configurado con ExecStart= llame a fork() como parte de su inicio.Se espera que el proceso principal salgacuando se completa el inicio y se configuran todos los canales de comunicación.El niño sigue corriendo.como el proceso de servicio principal, y el administrador de servicios considerará que la unidad se inició cuando el proceso principal salga.