Cron

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 14 de septiembre de 2016; las comprobaciones requieren 28 ediciones .

cron es un demonio  clásico ( programa informático  en  sistemas de  clase  UNIX ) que se utiliza para ejecutar trabajos periódicamente en un momento específico. Las acciones regulares se describen mediante instrucciones ubicadas en archivos crontab y directorios especiales.

El nombre cron se deriva de la palabra griega χρόνος (hrόnos) - tiempo (en inglés - cronos ). El desarrollador de cron , Ken Thompson , lo confirmó en una conversación privada con Brian Kernighan .   .

En los sistemas basados ​​en systemd , cron ha sido reemplazado por el mecanismo integrado systemd.timer.

Los archivos crontab creados para usuarios individuales se encuentran en el directorio [1] /usr/spool/cron/crontabs/ o /var/spool/cron/tabs/ . No se recomienda editarlos manualmente, para ello se utiliza el comando crontab -e. Los archivos crontab utilizados para administrar todo el sistema se encuentran en el directorio /etc/cron.d/ . Además, los directorios /etc/cron.daily/ , /etc/cron.weekly/ y /etc/cron.monthly/ contienen programas que se ejecutan automáticamente (diariamente, semanalmente o mensualmente).

El archivo de configuración principal de cron /etc/crontab, se parece a esto:

# /etc/crontab: crontab para todo el sistema # A diferencia de cualquier otro crontab, no tiene que ejecutar el comando `crontab' # para instalar la nueva versión cuando edite este archivo # y los archivos en /etc/cron.d. Estos archivos también tienen campos de nombre de usuario, # que ninguno de los otros crontabs tiene. SHELL = /bin/sh RUTA = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # mh dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #

crontab

Cada usuario del sistema tiene su propio archivo establecido por crontab , que describe a qué hora y qué programas ejecutar en nombre de este usuario. Para editar el archivo crontab , se utiliza un programa especial crontab del mismo nombre , que le permite no interrumpir el proceso cron durante la edición.

Muestra el contenido del archivo de programación actual:

crontab-l

Eliminación del archivo de programación actual:

crontab -r

Para editar el archivo crontab de su usuario , use el comando [2]

crontab -e

La tabla crontab consta de 6 columnas separadas por espacios o tabulaciones . Las primeras cinco columnas establecen el tiempo de ejecución ( minuto , hora , día , mes , día de la semana ), pueden contener un número, una lista de números separados por comas, un rango de números separados por un guión, símbolos *o /. En los archivos crontab del sistema , después de los campos de tiempo, se indica el usuario desde el que se ejecuta el comando. Todos los demás caracteres de la cadena se interpretan como un comando ejecutable con sus parámetros. Si el comando envía algún texto a la salida estándar, ese texto se envía al correo electrónico del usuario .

* * * * * comando a ejecutar - - - - - | | | | | | | | | ----- día de la semana (0-7) (domingo = 0 o 7) | | | ------- mes (1-12) | | --------- día del mes (1-31) | ----------- hora (0-23) ------------- minuto (0-59)

Un ejemplo de archivo crontab :

# los comentarios comienzan con '#' como de costumbre # usa /bin/sh como shell SHELL = /bin/sh # envía los resultados a esta dirección MAILTO = [email protected] # agrega el directorio de inicio del usuario a PATH PATH = /bin:/ usr/bin:/inicio/paul/bin #### Los trabajos comienzan aquí # se ejecutan todos los días a las 0 horas 5 minutos, agregan el resultado a log/daily 5 0 * * * $HOME /bin/daily.job >> $HOME /log/daily 2 > & 1 # ejecutar el 1 de cada mes a las 2:15 p. m. 15 14 1 * * $HOME /bin/monthly # todos los días de la semana a las 10:00 p. m. 0 22 * ​​​​* 1 -5 echo "Hora de ir a casa" | mail -s "Ya son las 22:00" juan 23 */2 * * * echo "Corriendo a las 0:23, 2:23, 4:23, etc." 5 4 * * sun echo "Corriendo a las 4:05 am el domingo" 0 0 1 1 * echo "¡Feliz Año Nuevo!" 15 10 .13 * * 1 .4 echo "Este mensaje se muestra los lunes y jueves a las 10:15 y 13:15" 0 -59 * * * * echo "Ejecutar cada minuto" 0 -59/2 * * * * echo " Se ejecuta en minutos pares" 1 -59/2 * * * * echo "Se ejecuta en minutos impares" # cada 5 minutos */5 * * * * echo "Han pasado cinco minutos" # cada primer domingo de cada mes. -eq 7 es el código del día de la semana, es decir, 1 -> lunes, 2 -> martes, etc. 0 1 1 -7 * * [ " $( fecha '+\%u' ) " -eq 7 ] && echo " Esta etiqueta se muestra cada primer domingo de cada mes a la 1:00 am"

Características

  • Todas las condiciones (hora de inicio) se verifican mediante "Y lógico", excepto las condiciones "día de la semana" y "día del mes" - especificadas juntas, se procesan mediante "O lógico", es decir, "en cualquier de los días", que se refleja en la documentación (Ubuntu, Debian, FreeBSD). Sin embargo, esta lógica no es obvia y no le permite crear una condición como "el primer lunes de cada mes" o "todos los viernes 13". Los desarrolladores no cambian este comportamiento, considerándolo como un estándar. [3]
  • Todos los archivos crontab deben terminar con una línea vacía; de lo contrario, se ignorará la última regla o el archivo completo.
  • Los comandos del archivo crontab utilizan la sintaxis de shell estándar, pero no se pueden dividir en varias líneas.
  • Los archivos ejecutables en directorios escaneados automáticamente como /etc/cron.daily/ se ignoran si su nombre contiene un punto.
  • La sintaxis de crontab utilizada para ejecutarse cada pocos minutos con un desplazamiento puede generar resultados inesperados. Por lo tanto, la grabación 1-56/5 * * * *no se activará el primer minuto de cada hora; para activar "cada 5 minutos a partir del primer minuto de la hora" use el formato 1-59/5 * * * *o 1,6,11,16,21,26,31,36,41,46,51,56 * * * *.
  • Se utiliza un carácter %en el comando de ejecución para pasar una nueva línea al comando (si no se escapa). El texto de comando que le sigue se pasa al programa que se está ejecutando no como parámetros de línea de comandos, sino a través de la entrada estándar .
  • La salida de los comandos lanzados se envía al usuario en cuyo nombre se realizó el lanzamiento. Si la directiva se encuentra en el archivo crontabMAILTO=<new@email> antes del comando , los datos de salida se enviarán a la dirección especificada.

Interfaz gráfica de usuario

Para comodidad de los usuarios, muchos sistemas tienen programas GUI especiales para administrar cron .

Horario de gnomos

Para distribuciones basadas en Debian:

  • Instalación:sudo apt-get install gnome-schedule
  • Ejecutar: Aplicaciones → Herramientas del sistema → Horario [1]

kron

Kcron es una interfaz de KDE para editar archivos de configuración cron . La utilidad se inicia con Alt+F2 , en la ventana de edición puede especificar con el mouse:

  • ruta completa al archivo ejecutable del programa
  • el momento adecuado para iniciar el programa
  • variables de entorno necesarias durante la ejecución del programa

Programas similares

  • NnCron  es un programador para Windows .
  • Programador de tareas: Programador  de tareas de Windows y su utilidad de consolaschtasks.exe.
  • at  - ejecutar programas una vez en un momento dado.
  • anacron  : lanzamiento periódico de programas, no necesariamente exactamente a la hora especificada: por ejemplo, si la máquina se apagó a la hora especificada en la tarea,anacronejecutará la tarea más tarde.
  • inetd  : ejecuta programas de servicio de solicitud de red.
  • upstart  : inicia programas de servicio de eventos (una generalización de cron, atd, anacron, inetd ).

Notas

  1. Man cron Archivado el 28 de mayo de 2007 en Wayback Machine .
  2. Cron Howto Archivado el 15 de mayo de 2011 en Wayback Machine .
  3. Discusión de Debian Issue Tracker Archivado el 11 de abril de 2018 en Wayback Machine .

Enlaces