Systemd: Unidades .service, .mount, .timer
Introducción
En systemd, todo lo que se puede gestionar se describe mediante unidades (units). Cada unidad
es un archivo de texto con una extensión que indica su tipo. Los archivos de unidad del sistema se encuentran
en /lib/systemd/system/ y las personalizaciones locales en
/etc/systemd/system/ (tienen prioridad).
Unidad .service — Definir un servicio
Es el tipo de unidad más común. Define cómo se arranca, detiene y supervisa un proceso (demonio).
Estructura básica de un archivo .service:
[Unit]
Description=Mi servidor web personalizado
After=network.target
[Service]
Type=simple
User=www-data
ExecStart=/usr/local/bin/miservidor --port 8080
ExecStop=/usr/local/bin/miservidor --stop
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
Secciones principales:
-
[Unit]→ descripción y dependencias (After,Requires,Wants) [Service]→ cómo ejecutar el servicio[Install]→ en qué target se activa al hacerenable
Opciones de Type:
simple→ el proceso principal es el que se lanza conExecStartforking→ el proceso hace fork al arrancar (clásico estilo daemon)oneshot→ se ejecuta una sola vez y terminanotify→ el servicio avisa a systemd cuando está listo
Opción Restart:
no→ no reiniciar nuncaon-failure→ reiniciar solo si termina con erroralways→ reiniciar siempre que termine
Activar un servicio propio:
# cp miservidor.service /etc/systemd/system/
# systemctl daemon-reload
# systemctl enable --now miservidor
Unidad .mount — Puntos de montaje
Define puntos de montaje gestionados por systemd. El nombre del archivo debe coincidir con la ruta del punto
de montaje, sustituyendo las / por -.
Ejemplo: /etc/systemd/system/mnt-datos.mount
[Unit]
Description=Disco de datos
[Mount]
What=/dev/sdb1
Where=/mnt/datos
Type=ext4
Options=defaults
[Install]
WantedBy=multi-user.target
En la práctica, la mayoría de los montajes se siguen configurando en /etc/fstab, y systemd genera
unidades .mount automáticamente a partir de ese archivo.
Ver las unidades de montaje activas:
$ systemctl list-units --type=mount
Unidad .timer — Temporizadores
Permiten ejecutar unidades de forma programada, como alternativa moderna a cron. Cada
.timer está vinculado a una unidad .service del mismo nombre base.
Ejemplo: ejecutar un script de backup cada día a las 2:00
Archivo /etc/systemd/system/backup.service:
[Unit]
Description=Script de backup diario
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
Archivo /etc/systemd/system/backup.timer:
[Unit]
Description=Backup diario a las 2:00
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
Activar el timer:
# systemctl daemon-reload
# systemctl enable --now backup.timer
Opciones de temporización:
-
OnCalendar→ horario absoluto (como cron:daily,weekly,Mon *-*-* 09:00) OnBootSec→ tiempo después del arranque (5min)OnUnitActiveSec→ tiempo desde la última ejecución (1h)Persistent=true→ ejecutar aunque se haya perdido la ejecución (sistema apagado)
Listar timers activos:
$ systemctl list-timers
Otros tipos de unidades
.socket→ activa un servicio cuando llega tráfico en un socket (activación por socket).path→ activa un servicio cuando cambia un archivo o directorio.target→ agrupa unidades (ya visto en el apartado anterior).slice→ agrupa procesos para gestionar recursos (cgroups).scope→ procesos externos iniciados fuera de systemd