Movatterモバイル変換


[0]ホーム

URL:


Ir al contenido
WikipediaLa enciclopedia libre
Buscar

cron (Unix)

De Wikipedia, la enciclopedia libre
cron

Ejemplo de uso de la utilidad de línea de comandos cron
Información general
Tipo de programautilidad estándar de Unix
DesarrolladorAT&T Bell Laboratories
Lanzamiento inicialmayo de 1975
Información técnica
Programado enC

En elsistema operativoUnix,cron es un administrador regular deprocesos en segundo plano (demonio) que ejecuta procesos oguiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora a la que deben hacerlo se especifican en el archivocrontab. El nombrecron proviene del griegochronos (χρόνος) que significa "tiempo".

Cron se puede definir como el equivalente a Tareas Programadas deWindows.

Vista general

[editar]

Cron es desencadenado porcrond, un archivo de configuración que específica comandoshell para ejecutarse periódicamente a una hora específica. Los archivoscrontab son almacenados en donde permanecen las listas de trabajos y otras instrucciones para el demonio cron. Los usuarios habilitados para crear su archivocrontab se especifican en el archivocron.allow. De manera análoga, los que no lo tienen permitido figuran en cron.deny. Estos dos últimos archivos se encuentran en/etc/cron.d/, o/etc/, dependiendo de la versión deUnix.

Cada línea de un archivo crontab representa un trabajo y es compuesto por una expresión CRON, seguida por un comandoshell para ejecutarse. Algunas implementaciones de cron, tal como en la popularBSD 4a edición escrita porPaul Vixie, e incluido en muchas distribucionesLinux, agrega una especificación de nombre de usuario dentro del formato como un sexto campo, como quién ejecutará el trabajo especificado (sujeto a la existencia de un usuario en/etc/passwd y permisos autorizados). Esto solo es permitido en el sistema crontab (/etc/crontab y /etc/cron.d/*), no en otros donde son asignados cada usuario es asignado a una configuración.

Para el "día de la semana" (campo 5), ambos 0 y 7, son considerados Domingo, a través de algunas versiones deUnix tal comoAIX no toma como válido el "7" según la página deman. Mientras que cuando el trabajo es ejecutado normalmente cuando fueron especificados los campos tiempo/fecha, todos coinciden con la hora y fecha actual, esto es una excepción.

Si tanto el "día del mes" como "día de la semana" son restringidos (no son" * " ), entonceso el "día del mes" (campo 3)o el "día de la semana" (campo 5) debe coincidir con el día actual.

Formato del archivocrontab

[editar]

Archivo crontab de ejemplo:

SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# run-parts01  * * * * root nice -n 19 run-parts /etc/cron.hourly50  0 * * * root nice -n 19 run-parts /etc/cron.daily22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly42 4 1 * * root nice -n 19 run-parts /etc/cron.monthly

Para agregar, quitar o modificar tareas, hay que editar el crontab. Esto se hace con la ordencrontab -e, que abrirá eleditor definido en lavariable de entornoEDITOR y cargará el archivocrontab correspondiente al usuario que está identificado.

Cada vez que se ejecuta el crontab, se envía un mensaje al usuario que aparece en la variable de entornoMAILTO, si está habilitado, indicándole la tarea realizada.


A continuación se trunca el log de error de Apache un minuto después de medianoche (00:01 de cada día del mes, de cada día de la semana).

1 0 * * *  echo -n "" > /www/apache/logs/error_log

A continuación se ejecuta el script: /home/user/test.pl cada 5 minutos.

*/5 * * * *  /home/user/test.pl
.--------------- minuto (0-59) |  .------------ hora (0-23)|  |  .--------- día del mes (1-31)|  |  |  .------ mes (1-12) o jan,feb,mar,apr,may,jun,jul... (meses en inglés)|  |  |  |  .--- día de la semana (0-6) (domingo=0 o 7) o sun,mon,tue,wed,thu,fri,sat (días en inglés) |  |  |  |  |*  *  *  *  *  comando a ejecutar

Nota: no soporta variables de entorno


Sintaxis

[editar]

El formato de configuración de cron es muy sencillo.

  • El símbolo almohadilla «#» es un comentario, todo lo que se encuentre después de ese carácter no será ejecutado porcron.
  • El momento de ejecución se especifica de acuerdo con la siguiente tabla:
  1. Minutos: (0-59)
  2. Horas: (0-23)
  3. Días: (1-31)
  4. Mes: (1-12)
  5. Día de la semana: (0-6), siendo 1=lunes, 2=martes,... 6=sábado y 0=domingo (a veces también 7=domingo)
###########################################################minuto (0-59),                                          ##|  hora (0-23),                                         ##|  |  día del mes (1-31),                               ##|  |  |  mes (1-12),                                    ##|  |  |  |  día de la semana (0-6 donde 0=Domingo)      ##|  |  |  |  |       comandos                            ###########################################################15 02  *  *  *
Para especificar todos los valores posibles de una variable se utiliza unasterisco (*).
  • La última columna corresponde a laruta absoluta del binario oscript que se quiere ejecutar.

Ejemplos

[editar]

Por ejemplo:

30 10 * * 1 /usr/bin/who >> /var/log/usuarios.txt

Ejecuta la ordenwho todos los lunes a las10:30 y guarda la salida en el archivousuarios.txt

Para especificar dos o más valores en cada variable, estas deben estar separadas por comas, siguiendo el ejemplo anterior:

0,30 * * * 1 /usr/bin/who >> /var/log/usuarios.txt

Ejecuta la orden who todos los lunes cada media hora y guarda la salida en el archivousuarios.txt

Si queremos que se ejecute cada 15 minutos sería

0,15,30,45 * * * * /usr/bin/who >> /var/log/usuarios.txt

o

*/15 * * * * /usr/bin/who >> /var/log/usuarios.txt

En este ejemplo veremos como pasarle más de un comando al cron y de paso como puede programarse una descarga:

30 21 * * * cd /media/sda7/dexter/distributions/isos;wgethttp://example.com/archivo_a_descargar.loquesea

Este otro es para programar el apagado del PC. En este caso todos los sábados a las 21.30

30 21 * * 6 /sbin/shutdown -h now

Editar crontab de un usuario en particular

crontab [ -u usuario ] archivo

crontab [ -u usuario ] { -l | -r | -e }

La opción -u se utiliza para indicar el crontab de usuario que queremos administrar.Sólo root podrá usar la orden crontab con esta opción.

La opción -e se utiliza para editarlo

Definición de horarios predefinidos

[editar]

Hay varios valores predefinidos que se pueden utilizar para sustituir la expresión CRON.

EntradaDescripciónEquivale A
@yearlySe ejecuta una vez al año0 0 1 1 *
@annually(igual que@yearly)0 0 1 1 *
@monthlySe ejecuta una vez al mes0 0 1 * *
@weeklySe ejecuta una vez a la semana0 0 * * 0
@dailySe ejecuta una vez al día0 0 * * *
@midnight(igual que@daily)0 0 * * *
@hourlySe ejecuta una vez cada hora0 * * * *

También está disponible@reboot, que permite a un trabajo ejecutarse una vez cada vez que el demonio cron se inicie, que eso tipìcamente coincidirá con el arranque del servidor. Puede ser útil si es necesario levantar un servidor o demonio bajo un usuario en particular o si el usuario no tiene permisos al archivorc.d/init.d.

Manipulación de zonas horarias

[editar]

Muchas implementaciones de cron simplemente interpretan entradas crontab en la configuración del sistema de zona horaria en virtud de lo que establece el demonio al ejecutarse. Esto puede ser el origen de conflictos si grandes equipos multiusuarios tienen usuarios en varias zonas horarias, especialmente si el sistema de zona horaria predefinida incluye el confusor potencialDST. Por lo tanto una implementación cron puede tener cualquier caso especial "TZ=<timezone>" variable de entorno ajustando líneas en el usuario crontab, interpretando entradas relativas crontab posteriores a la zona horaria.[1]

Historia

[editar]

Primeras versiones

[editar]

Cron enUnix versión7, escrita porBrian Kernighan, fue un sistema de servicio (después llamadodemonio) invocado de/etc/inittab cuando elS.O. entró en modo multiusuario. Este algoritmo fue sencillo:

  1. Leer/usr/etc/crontab
  2. Determinar si algún comando se estaba ejecutando en la fecha y hora actual, y si se ejecutaba comoRoot.
  3. Suspender por un minuto
  4. Repetir paso 1.

Esta versión de cron fue básica y robusta, pero también consumió recursos si encontraba algún trabajo que hacer o no; al escuchar esta descripción,Douglas Comer, un profesor de laUniversidad Purdue, remarcó, "Ah, un algoritmo de poca memoria.". En un experimento en la Universidad Purdue pasados los años setenta para extender los servicios de cron a todos los 100 usuarios sobre un tiempo compartidoVAX que fue situado en un lugar de mucha carga del sistema.

Capacidad multi-usuario

[editar]

La siguiente versión de cron, con la liberaciónSystem V, fue creada para extender las capacidades de cron para todos los usuarios de un sistema Unix, no solo root (o superusuario). Aunque esto hoy puede ser trivial con la mayoría de Unix y sistemas tipo Unix con procesadores potentes y un número pequeño de usuarios, al momento que requiere un nuevo enfoque sobre un sistema 1MIPS teniendo alrededor de 100 cuentas de usuario.

Versiones modernas

[editar]

Con la ventaja del proyectoGNU yLinux, apareció un nuevo cron. Lo más relevante de este es el cron Vixie, originalmente codificado porPaul Vixie en 1987. La versión 3 decron Vixie fue liberada después de 1993. La versión 4.1 fue renombrada comoCronISC (Consorcio de Sistema de Internet) y fue liberada en enero del 2004. La versión 3, con unas mínimas correcciones de error, es usada en la mayoría de las distribuciones de GNU/Linux y BSD.

En 2007, RedHat bifurcó cron-vixie 4.1 al proyecto cronie e incluyó anacron 2.3 en 2009.

Otra implementación popular incluyeanacron yfcron. De cualquier forma,anacron no es un programa cron independiente; se basa en otro programa cron para llamarlo en orden para ejecutarse.

Referencias

[editar]
  1. «Sun.com». Archivado desdeel original el 5 de agosto de 2009. Consultado el 28 de abril de 2010. 

Enlaces externos

[editar]
Control de autoridades

  • Informática
  • Debian:cron
Obtenido de «https://es.wikipedia.org/w/index.php?title=Cron_(Unix)&oldid=163320226»
Categorías:

[8]ページ先頭

©2009-2026 Movatter.jp