DEV Community

Cover image for systemd, configurar un script como servicio.
1N0T
1N0T

Posted on • Updated on

systemd, configurar un script como servicio.

Ya hace algún tiempo que systemd está entre nosotros y, parece que no tiene intención de desaparecer, ya que ha sido adoptado por la mayoria de distribuciones linux. Así que será mejor que nos hagamos a la idea y empecemos a aceptarlo como un compañero más que estará entre nosotros.

Para romper el hielo, nada mejor que hacer una prueba de concepto y definir nuestro propio servicio.

Procederemos a crear el script que queremos ejecutar como servicio, que aunque con poca utilidad, nos permitirá comprobar el correcto funcionamiento de nuestra configuración.

#!/bin/bash

# La única finalidad de este script es probar el proceso
# de configuración de un servicio en systemd.

# Enviamos mensaje inforamtivo del inicio de nuestro servicio.
echo "mi-servicio.service   *** iniciando ***" | systemd-cat -p info

# realizamos un loop infinito que mantendrá nuestro escript en ejecución.
# Grabaremos la hora cada minuto en el log del sistema.
while true; do
   ahora=$(date '+%Y-%m-%d %H:%M:%S') 
   echo "mi-servicio: $ahora" | systemd-cat -p info
   sleep 60
done
Enter fullscreen mode Exit fullscreen mode

Aunque no es requisito que se encuentre en alguna ubicación concreta, lo copiaremos a /usr/local/bin que es el sitio recomendado para la instalación de nuestros programas.

sudo cp mi-servicio.sh /usr/local/bin
Enter fullscreen mode Exit fullscreen mode

Naturalmente, tenemos que asegurarnos que sea ejecutable.

sudo chmod +x /usr/local/bin/mi-servicio.sh
Enter fullscreen mode Exit fullscreen mode

Ahora, deberemos crear el fichero de configuración del servicio dentro del directorio /etc/systemd/system/ que por convención lo llamaremos mi-servicio.service, pero antes, nos aseguraremos que no se esté utilizando ya este nombre.

sudo systemctl list-unit-files --type=service
Enter fullscreen mode Exit fullscreen mode

Como seguramente la lista será larga, podemos optar por filtrar la salida del comando.

sudo systemctl list-unit-files --type=service | grep mi-servicio
Enter fullscreen mode Exit fullscreen mode

Si no aparece nada, podremos utilizar el nombre elegido. Así que, seleccionamos nuestro editor favorito y añadimos un contenido parecido al siguiente:

[Unit]
Description=Mi servicio super-útil

[Service]
ExecStart=/usr/local/bin/mi-servicio.sh

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode

Aunque existen muchos más parámetros disponibles, nos hemos limitado a especificar el mínimo indispensable, que en este caso proporcionan una descripción, indican el programa a ejecutar y que esté disponible cuando el sistema se inicie en modo multiusuario con red (nuestro antiguo runlevel 3).

Como ya hemos convenido, lo salvaremos con el nombre /etc/systemd/system/mi-servicio.service

No se requiere que el fichero sea ejecutable, pero si es muy conveniente modificar los permisos.

sudo chmod 640 /etc/systemd/system/mi-servicio.service
Enter fullscreen mode Exit fullscreen mode

Vamos a ver que tal pinta tiene lo realizado

sudo systemctl status mi-servicio
Enter fullscreen mode Exit fullscreen mode

Si obtenemos algo parecido a lo siguiente, será indicativo de que el fichero de configuración es correcto.

● mi-servicio.service - Mi servicio super-útil
   Loaded: loaded (/etc/systemd/system/mi-servicio.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
Enter fullscreen mode Exit fullscreen mode

Si es así, ya tenemos nuestro servicio, que podremos administrar como cualquier otro. Procedamos pues a iniciarlo.

sudo systemctl start mi-servicio
Enter fullscreen mode Exit fullscreen mode

Si todo ha ido bien, cuando miremos su status, tendrá un aspecto similar a la siguiente:

sudo systemctl status mi-servicio
Enter fullscreen mode Exit fullscreen mode
● mi-servicio.service - Mi servicio super-útil
   Loaded: loaded (/etc/systemd/system/mi-servicio.service; disabled; vendor preset: enabled)
   Active: active (running) since Sun 2020-09-13 01:12:27 CEST; 25s ago
 Main PID: 17095 (mi-servicio.sh)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/mi-servicio.service
           ├─17095 /bin/bash /usr/local/bin/mi-servicio.sh
           └─17117 sleep 60

sep 13 01:12:27 P1912 systemd[1]: Started Mi servicio super-útil.
sep 13 01:12:27 P1912 cat[17116]: mi-servicio: 2020-09-13 01:12:27
Enter fullscreen mode Exit fullscreen mode

Eureka !!! ya tenemos nuestro servicio funcionando.

Discussion (0)