Saltar la navegación

Tutorial de systemd

Systemd es un administrador de sistemas y servicios para sistemas operativos GNU/Linux que se ejecuta como primer proceso en el arranque (PID 1). Está diseñado para ser compatible con los scripts de inicio de SysV y proporciona una serie de funciones como el inicio paralelo de los servicios del sistema en el momento del arranque, la activación de demonios bajo demanda o la lógica de control de servicios basada en dependencias. Actualmente la mayoría de las distribuciones GNU/Linux lo ha adoptado como iniciador del sistema.

# ls -l /sbin/init 
lrwxrwxrwx 1 root root 20 sep 20 14:15 /sbin/init -> /lib/systemd/systemd
$ ps -A
PID TTY TIME CMD
1 ? 00:00:02 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
...

El inicio SysV no es especialmente rápido, pues arranca los servicios en serie, y systemd consigue mucha más rapidez ya que intenta que el ancho de banda disponible de E/S del disco y la CPU estén al máximo paralelizando el arranque de los servicios, además de iniciar menos servicios posponiendo el inicio de estos hasta que realmente se necesiten.

El comando systemctl es el que se utiliza para que el root pueda indicarle al sistema systemd lo que desea que haga.

Un concepto fundamental que introduce systemd es el de unidades systemd (systemd units) que representan a objetos que son relevantes para el inicio del sistema y se configuran a través de ficheros de unidades, que podemos encontrar fundamentalmente en los siguientes directorios:

  • /usr/lib/systemd/system: Durante la instalación de los paquetes, si estos instalan algún fichero de unidad, lo colocan en este directorio.
  • /run/systemd/system: Aquí están los ficheros de unidades que se crean en tiempo de ejecución.
  • /etc/systemd/system: En este directorio se guardan los ficheros de unidades creados por el root.

En caso de que un mismo fichero de unidad se encuentre en varios de estos directorios, la lista anterior muestra los directorios de menor a mayor prioridad.

Podemos ver la lista exacta de directorios donde se pueden encontrar ficheros de unidad usando el siguiente comando:

$ systemctl show --property UnitPath
UnitPath=/etc/systemd/system.control /run/systemd/system.control /run/systemd/transient /run/systemd/generator.early /etc/systemd/system /etc/systemd/system.attached /run/systemd/system /run/systemd/system.attached /run/systemd/generator /usr/local/lib/systemd/system /lib/systemd/system /usr/lib/systemd/system /run/systemd/generator.late

Además, la lista muestra de izquierda a derecha, el orden en el que se va buscando el fichero de unidad, y una vez que se encuentra, ya no se sigue buscando en el resto de directorios.

Los tipos de unidades que existen son: service, target, automount, device, mount, path, scope, slice, socket, swap y timer.

La configuración global de systemd se realiza en el fichero /etc/systemd/system.conf, donde se colocan expresiones del tipo Parámetro=valor.