imagen

Corriendo NodeJS App con Systemd

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/system

Para crear un nuevo servicio, debemos crear un archivo con los detalles:

sudo nano /lib/systemd/system/mi_servicio.service

mi_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.target

donde:

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-reload

Iniciamos el servicio

sudo systemctl start mi_servicio

Recuerda que mi_servicio corresponde al nombre del archivo mi_servicio.service creado anteriormente

Luego verificamos el status del servicio

sudo systemctl status cloud9

Deberiamos 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.io

Le diremos a systemd que inicie nuestra aplicacion en NodeJs junto con el sistema operativo

sudo systemctl enable cloud9

Si luego quieres que no inicie

sudo systemctl disable cloud9

Lectura Recomendada: How To Use Systemctl to Manage Systemd Services and Units