• UbuCon Latinoamérica 2016
  • Ubuntu Phone
  • Rápido, seguro, libre e increíblemente fácil de usar
  • Ubuntu: Linux para seres humanos
  • Linux es Educación. Linux es Ciencia
  • Ubuntu es diseño, Ubuntu es innovación
  • Ubuntu León semper plus ultra
  • Keep calm and enjoy Ubuntu
  • Usa el teclado como se merece con el Dash de Ubuntu
  • pf-kernel para Ubuntu
  • Convierte tu iMac en un ordenador de verdad
  • Unity. Al fin un escritorio ordenado
  • Software libre, para una sociedad libre

CARGAR UN SCRIPT AL INICIO DEL SISTEMA CON SYSTEMD

Entrada escrita por: Fernando Lanero Barbero
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.

Artículos relacionados