DEV Community

loading...
Cover image for systemd, configurar un script como servicio.

systemd, configurar un script como servicio.

1N0T
・3 min read

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

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

Naturalmente, tenemos que asegurarnos que sea ejecutable.

sudo chmod +x /usr/local/bin/mi-servicio.sh

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

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

sudo systemctl list-unit-files --type=service | grpe mi-servicio

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

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

Vamos a ver que tal pinta tiene lo realizado

sudo systemctl status mi-servicio

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)

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

sudo systemctl start mi-servicio

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

sudo systemctl status mi-servicio
● 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

Eureka !!! ya tenemos nuestro servicio funcionando.

Discussion (0)