Cron

De La Wiki de KiVi
Cron
Programar tareas con cron
TítuloPrograma tareas por usuario o sistema
Cabecera3
Enlace del manual de redhathttps://www.redhat.com/sysadmin/linux-cron-command

Introducción

Cron es una herramienta de administración de tiempo en sistemas operativos Unix y Unix-like, que permite a los usuarios programar tareas para que se ejecuten automáticamente en momentos específicos, ya sea una vez, de forma recurrente o en momentos predefinidos. Crontab, por otro lado, es el archivo utilizado por el sistema para almacenar y administrar las listas de tareas programadas por los usuarios.

Funcionamiento de Cron

Cron se ejecuta en segundo plano y verifica periódicamente el archivo crontab para encontrar tareas programadas. Cuando encuentra una tarea que debe ejecutarse, la inicia automáticamente. Esto permite a los usuarios automatizar tareas repetitivas, como copias de seguridad, procesamiento de archivos, envío de informes, entre otras.

Cada línea de un archivo crontab representa un trabajo y es compuesto por una expresión CRON, seguida por un comando shell para ejecutarse.

Formato del fichero de crontab

De entre muchos ficheros, quiero comenzar con el fichero genérico de crontab, ubicado en /etc/crontab, en el que podemos añadir las tareas programadas por el sistema especificando el usuario que las ejecuta, este fichero no está disponible por defecto en las estaciones de trabajo.

El fichero de crontab tiene el siguiente formato:

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

  1. For details see man 4 crontabs
  1. Example of job definition:
  1. .---------------- minute (0 - 59)
  1. |  .------------- hour (0 - 23)
  1. |  |  .---------- day of month (1 - 31)
  1. |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
  1. |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
  1. |  |  |  |  |
  1. *  *  *  *  * user-name  command to be executed

En el que la línea más importante es la última que indica el tiempo de ejecución, el usuario que lo ejecuta y el comando.

Cadenas de texto

Hay que decir que en Linux existen algunas cadenas de texto reservadas para ejecutar procesos durante determinados periodos en el propio Crontab, esto nos será de mucha ayuda:

  • @reboot: Ejecuta una vez y nada más iniciarse el equipo.
  • @yearly: ejecuta sólo una vez al año: 0 0 1 1 *
  • @monthly: ejecuta una vez al mes y el primer día: 0 0 1 * *
  • @weekly: todas las semanas, el primer minuto de la primera hora de la semana: 0 0 * * 0.
  • @daily: todos los días a las 12 de la noche: 0 0 * * *
  • @midnight: Tiene el mismo efecto que el anterior.
  • @hourly: todas las horas durante su primer minuto: 0 * * * *

crontab como gestor de tareas por usuario

Las distribuciones actuales permiten que todos los usuarios puedan gestionar sus propias tareas, obviamente, según el usuario tendrán acceso y preferencias, por ejemplo, una tarea programada por "root" tiene prioridad sobre el resto.

Las tareas se gestionan con el comando: crontab Para poder editar se utiliza la opción: crontab -e Para poder listar las tareas del usuario sin editar podemos poner: crontab -l

Y para ver las tareas de otro usuario, por ejemplo que "root" vea las tareas del usuario "suport"

sudo -u suport crontab -l

Para borrar las tareas tenemos la opción de editarlas como antes he mostrado o ejecutar:

crontab -r

Que borra todas las tareas.

Una vez están editadas las tareas no hace falta reiniciar el servicio, ya que se aplican al momento.

IMPORTANTE - es necesario recordar que NO es lo mismo ejecutar el comando "crontab -e" que "sudo crontab -e", el primer comando lo ejecuta el usuario actual mientras que el segundo lo ejecuta root.

Tareas cron

Referencias

Podemos leer más sobre cron en: