Revista Informática

Cargar un script al inicio del sistema con systemd

Publicado el 24 octubre 2016 por Ferlanero @ferlanero
Hoy te voy a contar cómo escribir un script para que arranque con el sistema haciendo uso de systemd.
Lo primero que tienes que tener en cuenta es saber dónde van a quedar ubicados tus scripts, que estarán en /etc/systemd/system
Como systemd controla otros aspectos del sistema operativo necesita un poco más de información. Con systemd, para invocar un script necesitas colocarlo como un demonio del sistema, por lo tanto tendrás que escribirlo de tal forma que systemd lo entienda.
Lo primero que tienes que tener en cuenta es la denominación del script, que debe tener esta estructura en su nombre: "ejemplo.service" Además, el fichero tendrá que tener los permisos -rwxr-xr-x
Para crear el contenido del script, puedes tomar como ejemplo el script que te dejo a continuación, que básicamente está compuesto de tres partes:
[Unit]
Description=okboard reset to avoid fails
After=syslog.target
[Service]
Type=forking
ExecStart=/home/nemo/ejemplo.sh
[Install]
WantedBy=multi-user.target

En la sección ExecStart=/home/nemo/ejemplo.sh se da la ruta en dónde realmente está el script a ejecutar.  Y el tipo de demonio que va a ser en:
[Service]
Type=forking

Por último, la sección [Install] nos dice en qué runlevel se ejecutará. En el modo multiusuario o en el clásico sysv, que sería el runlevel 3.
[Install]
WantedBy=multi-user.target

Con esto ya tenemos todo listo para agregar nuestro script al inicio del sistema.
Ahora haría falta configurar el script con las órdenes propiamente dichas para que systemd ejecute al inicio del sistema exactamente lo que quieres. Este script tendrá que tener una estructura como la que te expongo a continuación:
#!/bin/sh
#function: resetea Okboard
rm /home/nemo/.local/share/okboard/*

Este script, con permisos -rwxr-xr-x , deberá estar en la ruta y con el nombre que previamente hayamos configurado en ejemplo.service en el apartado
[Service]
ExecStart=/home/nemo/ejemplo.sh

Es fundamental que el script comience con
#!/bin/sh
para que systemd entienda que es un script ejecutable de bash en shell.
Una vez configurado todo, antes de ejecutar la nueva configuración, primero hay que refrescar systemd para que lea de nuevo los servicios
systemctl daemon-reload

Para levantar el nuevo script:
systemctl start ejemplo.service 

Esto iniciará el servicio (no debe mostrar errores).
Y para verificar que el servicio se esté ejecutando con normalidad:
systemctl status ejemplo.service 

Nos mostrará algo similar a lo siguiente:
ejemplo.service - Daemon  of example
   Loaded: loaded (/etc/systemd/system/ejemplo.service; enabled)
   Active: activating (start) since Tue, 00 Sep 2010 10:04:02 -0600; 9s xx
   Control: 23604 (lkl)
   CGroup: name=systemd:/system/ejemplo.service
   └ 23604 /usr/sbin/example
Sep 04 22:04:02 xxx ejemplo[23604]:

Ahora que acabas de verificar que el servicio está activo, sólo queda habilitar el servicio para el autoarranque
systemctl enable ejemplo.service

Si todo va bien, el sistema devolverá el mensaje:
ln -s '/etc/systemd/system/okboard.service' '/etc/systemd/system/multi-user.target.wants/okboard.service'

Lo que indicará que todo está correcto.
Con esto ya tendrás tu script ejecutándose al inicio del sistema y homologado al esquema de systemd.

Volver a la Portada de Logo Paperblog