Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Qu es cron?
El nombre cron viene del griego chronos que significa tiempo. En el sistema operativo Unix, cron es un
administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos
regulares (por ejemplo, cada minuto, da, semana o mes). Los procesos que deben ejecutarse y la hora en la
que deben hacerlo se especifican en el fichero crontab.
Cmo funciona
El demonio cron inicia de /etc/rc.d/ o /etc/init.d dependiendo de la distribucion. Cron se ejecuta en el
background, revisa cada minuto la tabla de tareas crontab /etc/crontab o en /var/spool/cron en bsqueda de
tareas que se deban cumplir. Como usuario podemos agregar comandos o scripts con tareas a cron para
automatizar algunos procesos. Esto es util por ejemplo para automatizar la actualizacion de un sistema o un
buen sistema de respaldos.
Qu es Crontab?
Crontab es un simple archivo de texto que guarda una lista de comandos a ejecutar en un tiempo
especificado por el usuario. Crontab verificar la fecha y hora en que se debe ejecutar el script o el comando,
los permisos de ejecucin y lo realizar en el background. Cada usuario puede tener su propio archivo
crontab, de hecho el /etc/crontab se asume que es el archivo crontab del usuario root, cuando los usuarios
normales (e incluso root) desean generar su propio archivo de crontab, entonces utilizaremos el comando
crontab.
Crontab es la manera mas sencilla de administrar tareas de cron en sistemas multiusuario, ya sea como
simple usuario de sistema o usuario root.
Utilizando crontab
Vamos empezando con un ejemplo simple.
Vamos a automatizar la actualizacin de un sistema, para eliminar la molesta de siempre tengo que andar
actualizando y eso no me gusta!.
Primero que nada haremos un script. Este script ser llamado por cron y contendr todas las instrucciones
que queremos que haga, por lo tanto es necesario probarlo en varios casos y de varias formas antes de
incluirlo a cron, un sencillo script de actualizacion como este:
#!/bin/bash
#script ejemplo de actualizacion
#elija su distribucion
#debian-ubuntu
#apt-get update & apt-get -y upgrade
#fedora
#yum -y update
#Arch
#pacman --noconfirm -Syu
Crontab
Quitale el # a la lnea de tu distro. En caso de que sea Ubuntu/Debian, a la que empieza con apt-get.
Guardamos el script como actualizacion.sh (ej. directorio scripts tu home). Cambiamos los permisos de
ejecucion del dichoso script con:
Ejecutamos el script un par de veces para verificar que todo ejecute sin problemas, modificamos lo necesario
(no debe contener errores, si no cron solo repetira un error una y otra vez). Ahora a agregar la tarea a
nuestro crontab.
donde:
h la hora exacta, se maneja el formato de 24 horas, los valores van de 0 a 23, siendo 0 las 12:00
de la medianoche.
dom hace referencia al da del mes, por ejemplo se puede especificar 15 si se quiere ejecutar cada
dia 15
dow significa el da de la semana, puede ser numrico (0 a 7, donde 0 y 7 son domingo) o las 3
primeras letras del da en ingls: mon, tue, wed, thu, fri, sat, sun.
user define el usuario que va a ejecutar el comando, puede ser root, u otro usuario diferente
siempre y cuando tenga permisos de ejecucin del script.
Para que quedara claro unos cuantos ejemplos de tareas de cron explicados:
15 10 * * * usuario /home/usuario/scripts/actualizar.sh
15 22 * * * usuario /home/usuario/scripts/actualizar.sh
Crontab
Ejecutar el script actualizar.sh a las 10:15 p.m. todos los das
Usuario root ejecutar una actualizacin todos los domingos (sun) a las 10:45 a.m
30 7 20 11 * usuario /home/usuario/scripts/actualizar.sh
El da 11 de noviembre a las 7:30 a.m. y que sea domingo, el usuario festejar su sysadmin (o sea a m)
01 * * * * usuario /home/usuario/scripts/molestorecordatorio.sh
Un molesto recordatorio cada minuto de cada hora todos los das (NO recomendable).
Igual se pueden manejar rangos especiales:
30 17 * * 1,2,3,4,5
00 12 1,15,28 * *
A las 12 del da todos los das primero, quince y 28 de cada mes (ideal para nminas)
Si esto resulta confuso, crontab maneja cadenas especiales para definir estos rangos.
@reboot Ejecuta una vez, al inicio
@yearly ejecuta slo una vez al ao: 0 0 1 1 *
@annually igual que @yearly
@monthly ejecuta una vez al mes, el da primero: 0 0 1 * *
@weekly Semanal el primer minuto de la primer hora de la semana. 0 0 * * 0.
@daily diario, a las 12:00A.M. 0 0 * * *
Crontab
@midnight igual que @daily
@hourly al primer minuto de cada hora: 0 * * * *
Su uso es muy sencillo.
crontab archivo
crontab -e
Editar el archivo crontab del usuario, cada linea nueva sera una nueva tarea de crontab.
crontab -l
crontab -d
crontab -c dir
Define el directoriod e crontab del usuario (este debe tener permisos de escritura y ejecucion del usuario)
crontab -u usuario
Crontab
#crontab -d -u usuario
Esta herramienta, como muchas otras se pueden ver a mas profundidad y con mas detalle en:
cron (Unix)
En el sistema operativo Unix, cron es un administrador regular de procesos en segundo plano
(demonio) que ejecuta procesos o guiones a intervalos regulares (por ejemplo, cada minuto,
da, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se
especifican en el fichero crontab . El nombre cron viene del griegochronos () que
significa "tiempo".
Cron se podra definir como el "equivalente" a Tareas Programadas de Windows.
ndice
[ocultar]
1 Vista general
2.1 Sintaxis
2.2 Ejemplos
3 Historia
4 Referencias
Crontab
5 Enlaces externos
Vista general[editar]
Cron es impulsado por un crond, un archivo de configuracin que especfica
comando shell para ejecutarse peridicamente a una hora especfica. Los
archivos crontab son almacenados en donde permanecen las listas de trabajos y otras
instrucciones para el demonio cron. Los usuarios habilitados para crear su fichero crontab se
especifican en el fichero cron.allow. De manera anloga, los que no lo tienen permitido
figuran en cron.deny. Estos dos ltimos ficheros se encuentran en /etc/cron.d/, o /etc/,
dependiendo de la versin de Unix.
Cada lnea de un archivo crontab representa un trabajo y es compuesto por una expresin
CRON, seguida por un comando shell para ejecutarse. Algunas implementaciones de cron, tal
como en la popular BSD 4a edicin escrita por Paul Vixie, e incluido en muchas
distribuciones Linux, agrega una especificacin de nombre de usuario dentro del formato
como un sexto campo, como quin 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 configuracin.
Para el "da de la semana" (campo 5), ambos 0 y 7, son considerados Domingo, a travs de
algunas versiones de Unix tal como AIX no toma como vlido el "7" en el man. 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 excepcin.
Si tanto el "da del mes" como "da de la semana" son restringidos (no son " * " ),
entonces o el "da del mes" (campo 3) o el "da de la semana" (campo 5) debe coincidir con el
da actual.
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01
50
Crontab
Para agregar, quitar o modificar tareas, hay que editar el crontab. Esto se hace con la
orden crontab -e, que abrir el editor definido en la variable de entorno EDITOR y cargar el
fichero crontab correspondiente al usuario que est logueado.
Cada vez que se ejecuta el crontab, se enva un mensaje al usuario que aparece en la
variable de entorno MAILTO, si est habilitado, indicndole la tarea realizada.
1 0 * * *
*/5 * * * *
/home/user/test.pl
ingls)
|
Sintaxis[editar]
El formato de configuracin de cron es muy sencillo.
Crontab
##########################################################
#minuto (0-59),
#|
hora (0-23),
#|
#|
mes (1-12),
#|
#|
comandos
##########################################################
15 02
Para especificar todos los valores posibles de una variable se utiliza un asterisco (*).
La ltima columna corresponde a la ruta absoluta del binario o script que se quiere
ejecutar.
Ejemplos[editar]
Por ejemplo:
30 10 * * 1 /usr/bin/who >> /home/quien.tex
Ejecuta la orden who todos los lunes a las 10:30 y guarda la salida en el
fichero quien.tex
Crontab
Para especificar dos o ms valores en cada variable, estas deben estar separadas por
comas, siguiendo con el ejemplo anterior:
0,30 * * * 1 /usr/bin/who >> /home/quien.tex
Ejecuta la orden who todos los lunes cada media hora y guarda la salida en el
fichero quien.tex
Si queremos que se ejecute cada 15 minutos sera
0,15,30,45 * * * * /usr/bin/who >> /home/quien.tex
o
*/15 * * * * /usr/bin/who >> /home/quien.tex
Este otro es para programar el apagado del PC. En este caso todos
los sbados a las 21.30
30 21 * * 6 /sbin/shutdown -h now
Crontab
Entrada
Descripcin
Equivale
@yearly
@annually
(igual que
@monthly
0 0 1 * *
@weekly
0 0 * * 0
@daily
0 0 * * *
@midnight
(igual que
@hourly
@yearly )
@daily )
0 0 1 1 *
0 0 1 1 *
0 0 * * *
0 * * * *