Crear Servicios con Systemd en Ubuntu

Vamos a crear un servicio que se autoejecute al inicio del sistema en Ubuntu 17, utilizando Systemd.

 

Systemd es un gestor de demonios (daemons) de Linux; así que lo usaremos para gestionar un proceso o servicio que crearemos y deseamos que se ejecute al inicio del sistema.

componentes systemd linux
 

Imagen bajo licencia Creative Commons Attribution-Share Alike 3.0 Unported license, Shmuel Csaba Otto Traian | ScotXW

 

 
En este artículo:

 

 

1. CREANDO EL ARCHIVO QUE CONTENDRÁ EL SERVICIO

 
Primero creamos un archivo (un archivo unit file) con extensión .service (hay otras extensiones pero en este caso usaremos esta), que servirá para configurar el servicio;

lo llamamos “nombre_servicio.service” en /lib/systemd/system

 

Y lo rellenamos con lo siguiente (evidentemente hay que personalizar algunos datos en cada caso, como la descripción,  el directorio …):
 

[Unit]
Description=La descripción adecuada para nuestro servicio
After=network.target
 
[Service]
User=root
WorkingDirectory=/root/directorio/subdirectorio
Type=simple
ExecStart=/root/directorio/subdirectorio
GuessMainPID=no
 
[Install]
WantedBy=multi-user.target

 

 

1.1 DETALLES IMPORTANTES Y EXPLICACIONES SOBRE SERVICIOS  EN SYSTEMD

 

[Unit] : opciones genéricas

[Service] : opciones específicas para el tipo de extensión. En este caso extensión .service

[Install] : Info sobre la instalación del servicio.

 

 

1.2 Otras lineas de configuración importantes:

 
Un detalle pequeño pero importante son las lineas de Working Directory y Exec Start.

Si no rellenamos estas lineas con la ruta adecuada, el servicio no iniciará correctamente.
 

 

1.2 a) WorkingDirectory | Explicación

 
WorkingDirectory es el directorio en el que se encuentra el ejecutable

WorkingDirectory=/root/serv/build/bin

 
Sino el servicio no se ejecuta correctamente

 

 

 

1.2 b) ExecStart | Explicación

 
ExecStart necesita una ruta absoluta para funcionar. Si usamos una ruta relativa el servicio no funcionará correctamente.

 

 

2. ACTIVACIÓN DEL SERVICIO

 

Recargamos el daemon de los servicios:

sudo systemctl daemon-reload

 
Habilitamos el servicio creado:

sudo systemctl enable my.service

 
E iniciamos el servicio creado:

sudo systemctl start my.service

 
Para parar el servicio:

sudo systemctl stop my.service

Para  reiniciar el servicio:

sudo systemctl restart my.service

 

 

2.1 HACEMOS UN STATUS DEL SERVICIO (Comprobamos el estado)

 

systemctl status miservicio.service

 
systemctl status service linux

 

 

3. ENLACES INTERESANTES SOBRE SYSTEMD Y SERVICIOS EN UBUNTU