Está en la página 1de 10

Crontab

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:

chmod a+x ~/scripts/actualizacion.sh

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.

Agregar tareas a crontab


Ejecutamos la edicin del crontab con crontab -e, en algunas distros (como ubuntu) nos da la opcion de
elegir el editor de textos que deseemos, los dems nos quedamos con vi. El archivo crontab lucir algo asi.

# m h dom mon dow user command

donde:

m corresponde al minuto en que se va a ejecutar el script, el valor va de 0 a 59

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.

command refiere al comando o a la ruta absoluta del script a ejecutar,


ejemplo:/home/usuario/scripts/actualizar.sh, si acaso llama a un script este debe ser ejecutable

Para que quedara claro unos cuantos ejemplos de tareas de cron explicados:

15 10 * * * usuario /home/usuario/scripts/actualizar.sh

Ejecutar el script actualizar.sh a las 10:15 a.m. todos los das

15 22 * * * usuario /home/usuario/scripts/actualizar.sh

Crontab
Ejecutar el script actualizar.sh a las 10:15 p.m. todos los das

00 10 * * 0 root apt-get -y update Usuario root

Ejecutar una actualizacin todos los domingos a las 10:00 a.m

45 10 * * sun root apt-get -y update

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 20 de noviembre a las 7:30 el usuario correra el script

30 7 11 11 sun usuario /home/usuario/scripts/pastel_con_velitas.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

A las 5:30 de la tarde todos los das de lunes a viernes.

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.

@hourly usuario /home/usuario/scripts/molestorecordatorio.sh


@monthly usuario /home/usuario/scripts/respaldo.sh
@daily root apt-get update && apt-get -y upgrade

Por ltimo y no menos importante:


Administracion de trabajos en cron

crontab archivo

Remplaza el existente archivo crontab con un archivo definido por el usuario

crontab -e

Editar el archivo crontab del usuario, cada linea nueva sera una nueva tarea de crontab.

crontab -l

Lista todas las tareas de crontab del usuario

crontab -d

Borra el crontab del usuario

crontab -c dir

Define el directoriod e crontab del usuario (este debe tener permisos de escritura y ejecucion del usuario)

crontab -u usuario

prefijo para manejar el crontab de otro usuario, ejemplos:

$ sudo crontab -l -u root


$ sudo crontab -e usuario2

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 Formato del fichero crontab

2.1 Sintaxis

2.2 Ejemplos

2.3 Definicin de horarios predefinidos

2.4 Manipulacin de zonas horarias

3 Historia

3.1 Primeras versiones

3.2 Capacidad multi-usuario

3.3 Versiones modernas

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.

Formato del fichero crontab[editar]


Fichero crontab de ejemplo:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01

* * * * root nice -n 19 run-parts /etc/cron.hourly

50

0 * * * root nice -n 19 run-parts /etc/cron.daily

Crontab

22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly


42 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
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.

A continuacin se pone a cero el log de error de Apache un minuto despus de medianoche


(00:01 de cada da del mes, de cada da de la semana).

1 0 * * *

echo -n "" > /www/apache/logs/error_log

A continuacin se ejecuta el script: /home/user/test.pl cada 5 minutos.

*/5 * * * *

/home/user/test.pl

.---------------- minuto (0 - 59)


|

.------------- hora (0 - 23)

.---------- da del mes (1 - 31)

.------- mes (1 - 12) O jan,feb,mar,apr ... (los meses en

ingls)
|

.---- da de la semana (0 - 6) (Domingo=0 7) O

sun,mon,tue,wed,thu,fri,sat (los das en ingls)


|

comando para ser ejecutado

Nota: no soporta variables de entorno

Sintaxis[editar]
El formato de configuracin de cron es muy sencillo.

Crontab

El smbolo almohadilla # es un comentario, todo lo que se encuentre despus de


ese carcter no ser ejecutado por cron.

El momento de ejecucin se especifica de acuerdo con la siguiente tabla:


1. Minutos: (0-59)
2. Horas: (0-23)
3. Das: (1-31)
4. Mes: (1-12)
5. Da de la semana: (0-6), siendo 1=lunes, 2=martes,... 6=sbado y 0=domingo (a veces
tambin 7=domingo)

##########################################################
#minuto (0-59),

#|

hora (0-23),

#|

da del mes (1-31),

#|

mes (1-12),

#|

da de la semana (0-6 donde 0=Domingo)

#|

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

En este ejemplo veremos como pasarle ms de un comando al cron y de


paso como puede programarse una descarga:
30 21 * * * cd
/media/sda7/dexter/distributions/isos;wget http://example.com/fich
ero_a_descargar.loquesea

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

Editar crontab de un usuario en particular


crontab [ -u usuario ] fichero
crontab [ -u usuario ] { -l | -r | -e }
La opcin -u se utiliza para indicar el crontab de usuario que
queremos administrar. Slo root podr usar la orden crontab con
esta opcin.
La opcin -e se utiliza para editarlo

Definicin de horarios predefinidos[editar]


Hay varios valores predefinidos que se pueden utilizar para
sustituir la expresin CRON.

Crontab

Entrada

Descripcin

Equivale

@yearly

Se ejecuta una vez al ao

@annually

(igual que

@monthly

Se ejecuta una vez al mes

0 0 1 * *

@weekly

Se ejecuta una vez a la semana

0 0 * * 0

@daily

Se ejecuta una vez al da

0 0 * * *

@midnight

(igual que

@hourly

Se ejecuta una vez cada hora

@yearly )

@daily )

Tambin esta disponible @reboot , que permite a un trabajo


ejecutarse una vez cada vez que el demonio cron se inicie, que
eso tipcamente 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
archivo rc.d/init.d.

0 0 1 1 *

0 0 1 1 *

0 0 * * *

0 * * * *

También podría gustarte