Habilita tu app en NodeJS como un servicio mas del SO y controlalo con systemctl
Creando un archivo de servicio systemd
Los archivos de servicios systemd esta en:
/lib/systemd/systemPara crear un nuevo servicio, debemos crear un archivo con los detalles:
sudo nano /lib/systemd/system/mi_servicio.servicemi_servicio es el nombre con el que se reconocer el servicio.
[Unit]
Description=hello_env.js - making your environment variables rad
Documentation=https://example.com
After=network.target
[Service]
Environment=NODE_PORT=3001
Type=simple
User=ubuntu
ExecStart=/usr/bin/node /home/ubuntu/hello_env.js
Restart=on-failure
[Install]
WantedBy=multi-user.targetdonde:
Description descripción del servicio
Documentation Referencia donde encontrar la documentación
After=network.target Para que el servicio espere a que los servicios de res esten disponibles.
Environment=NODE_PORT=3001 : Permite setear variables de entorno
Type=simple
User=ubuntu : Usuario bajo el cual se ejecutara el servicio
ExecStart=node /home/ubuntu/app.js : Comando que se ejecutara para levantar el servicio
Restart=on-failure : Para que se vuelva a iniciar frente a un fallo
WantedBy=multi-user.target
Usando systemctl para controlar nuestra aplicación
Recargamos systemctl para que reconozca el archivo que agregamos anteriormete.
sudo systemctl daemon-reloadIniciamos el servicio
sudo systemctl start mi_servicioRecuerda que mi_servicio corresponde al nombre del archivo mi_servicio.service creado anteriormente
Luego verificamos el status del servicio
sudo systemctl status cloud9Deberiamos tener por respuesta algo como esto
● cloud9.service - Cloud9 CORE - Entorno de Desarrollo
Loaded: loaded (/lib/systemd/system/cloud9.service; disabled)
Active: inactive (dead)
Docs: https://c9.ioLe diremos a systemd que inicie nuestra aplicacion en NodeJs junto con el sistema operativo
sudo systemctl enable cloud9Si luego quieres que no inicie
sudo systemctl disable cloud9Lectura Recomendada: How To Use Systemctl to Manage Systemd Services and Units