¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Servicios y tareas programadas (systemd, cron)

Después de esta lección: Puedo ejecutar un programa como servicio y programar una tarea.

Lección de 55 min8 comandosLaboratorio de administración Linux: usuarios, permisos, cron y systemd en el navegador

El informe del lunes que nadie lanzó

Un restaurante quiere recibir el informe de ventas cada lunes a las ocho menos cuarto. Durante meses, alguien lo lanzó a mano.

Un lunes esa persona estaba enferma y el informe no llegó.

Una máquina debe hacer sola lo que se repite. Y debe mantener en marcha, sin ayuda, los programas importantes.

Al final de esta lección

Nota

Puedo ejecutar un programa como servicio y programar una tarea.

Palabras clave

PalabraQué significaEjemplo
Servicioun programa que el sistema mantiene en marcha
systemdel programa que arranca y vigila los serviciossystemctl
Archivo de unidadun archivo pequeño que describe un servicio a systemd
Habilitarhacer que un servicio arranque con la máquina
Cronel programa que lanza tareas a horas fijas
Tarea de cronuna línea con una hora y una orden45 7 * * 1

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

systemd mantiene los servicios

Un servicio es un programa que debe estar siempre en marcha, como un servidor web o un programa de correo. En Ubuntu, systemd los arranca con la máquina y los vigila.

Hablas con systemd mediante systemctl. Puedes preguntar si un servicio está activo (is-active) y si arranca con la máquina (is-enabled).

¿Está activo el servicio cron?

Comando
systemctl is-active cron

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Arranca con la máquina?

Comando
systemctl is-enabled cron

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

La historia completa

Comando
systemctl status cron --no-pager

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

El archivo de unidad de cron

Comando
systemctl cat cron --no-pager

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo: los verbos de systemctl

OrdenQué hace¿Sobrevive a un reinicio?
systemctl start reservasLo arranca ahoraNo
systemctl stop reservasLo para ahoraNo
systemctl restart reservasLo para y lo arrancaNo
systemctl enable reservasHace que arranque con la máquinaSí
systemctl disable reservasHace que no arranque con la máquinaSí

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un archivo de unidad tiene tres partes

Un archivo de unidad es texto sencillo. El que escribes tú va en /etc/systemd/system. El que trae un paquete está en /usr/lib/systemd/system. [Unit] describe el servicio. [Service] dice qué ejecutar en ExecStart y si debe volver tras un fallo en Restart. [Install] dice cuándo arrancar. El bloque siguiente muestra uno para un programa llamado reservas.

Una unidad para otro programa

Código: bash
[Unit]
Description=Programa de reservas del restaurante

[Service]
ExecStart=/usr/local/bin/reservas
Restart=on-failure

[Install]
WantedBy=multi-user.target

Un error frecuente

Advertencia

Mucha gente cree que systemctl start también hace que el servicio vuelva tras un reinicio. No es así. start lo arranca ahora. enable hace que arranque con la máquina. Si necesitas las dos cosas, haz las dos.

Cron lanza una orden a horas fijas

Una línea de cron tiene cinco campos de tiempo y después la orden. Los campos son minuto, hora, día del mes, mes y día de la semana.

Un asterisco * significa todos. Un número significa exactamente ese. En el campo de minutos, */10 significa cada diez minutos: 0, 10, 20 y así.

Ejemplo: leer horas de cron

CamposSe ejecuta
45 7 * * 1A las 07:45 cada lunes
0 * * * *Al principio de cada hora
*/10 * * * *Cada diez minutos
0 9 1 * *A las 09:00 el día 1 de cada mes
30 23 * * 5A las 23:30 cada viernes

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Tu propia lista de tareas

Comando
crontab -l

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Dos líneas de ejemplo para cron

Código: bash
# minuto hora dia-del-mes mes dia-de-la-semana usuario orden
45 7 * * 1 root /usr/local/bin/informe-semanal.sh
*/20 * * * * root /usr/local/bin/sincronizar-stock.sh

La carpeta del sistema añade un campo

La lista de un usuario, que muestra crontab -l, tiene las cinco horas y la orden.

Un archivo de /etc/cron.d añade el usuario con el que se ejecuta, entre la hora y la orden. Si cron no acepta un archivo, lo salta sin avisar en pantalla. El dueño debe ser root y nadie más puede escribir en él. El nombre no lleva punto, así que informe.cron se salta. La última línea debe acabar en salto de línea.

La carpeta de tareas del sistema

Comando
ls -l /etc/cron.d

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un script que espera su hora

Comando
cat /usr/local/bin/backup.sh

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

systemd también tiene temporizadores

Comando
systemctl list-timers --no-pager

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos

Cron lee 1-5 en el campo del día de la semana como de lunes a viernes. En papel, escribe la línea de un archivo de /etc/cron.d que ejecute /usr/local/bin/sincronizar-stock.sh como root a las 22:45, solo entre semana.

Después di cuándo se ejecuta la próxima vez si ahora es viernes a las 23:00.

Sobre este laboratorio y su código: Laboratorio de administración Linux: usuarios, permisos, cron y systemd en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.