1N0T
Posted on September 12, 2020
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 | grep 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.
Posted on September 12, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.