Cron
Cron
Cron
1
Índice
1. Introducción 3
2. El crontab de root 3
2.1. Listando el crontab . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Programando tareas . . . . . . . . . . . . . . . . . . . . . . . . . 4
5. Log de cron 6
2
1. Introducción
Cron1 es un administrador o planificador de tareas de segundo plano. Es
un demonio que ejecuta procesos, programas o scripts, a intervalos regulares
programados. Por ejemplo podemos instruirlo para ejecutar un script cada cinco
minutos, o una copia de seguridad diaria, o una exportación semanal de la base
de datos.
Las horas a las que deben ejecutarse dichos procesos se indican en el fichero
crontab correspondiente al usuario.
En el sistema operativo Unix, cron es un administrador regular de procesos
en segundo plano (demonio) que ejecuta procesos o scripts a intervalos regu-
lares (por ejemplo, cada minuto, dı́a, semana o mes). Los procesos que deben
ejecutarse y la hora en la que deben hacerlo se especifican en el archivo crontab
correspondiente.
En este módulo veremos como:
2. El crontab de root
El fichero crontab de root se guarda en /var/spool/cron/crontabs/root, pero
nunca editaremos los ficheros de cron directamente. Para editar el crontab (fi-
chero donde se guardan las tareas programadas) de root, utilizaremos siempre
la utilidad crontab. Concretamente utilizaremos la orden crontab -e:
#> crontab -e
3
Esta lı́nea simplemente nos servirá de guión para escribir debajo de ella
nuestras tareas. Como se puede ver nos está indicando el formato, primero los
minutos, luego la hora, el dı́a del mes, el mes y el dı́a de la semana, es decir:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=sistemas@conectahosting.es
#> crontab -l
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=sistemas@conectahosting.es
#> crontab -e
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
Si quisiéramos que se ejecutase a las 19:30h pero sólo los lunes pondrı́amos:
4
# m h dom mon dow command
30 19 * * 1 echo "Son las 19:30h. del lunes." >> /var/log/mi-cron.log
¿Pero que ocurre si queremos que se ejecute a las 19 y a las 19:30h? Podemos
poner más de un valor en cada campo, separándolos por comas:
# m h dom mon dow command
0,30 19 * * * echo "Son las 19 o las 19:30h. No estoy seguro." >> /var/log/mi-cron.log
/etc/cron.daily
/etc/cron.hourly
/etc/cron.weekly
/etc/cron.monthly
Dichos directorios se suelen utilizar para enlazar guiones que deban ser lla-
mados en el intervalo correspondiente al directorio, sin argumentos. Por ejemplo,
si creamos un guión de bash y lo guardamos en /root/bin, le damos permisos de
ejecución, y lo enlazamos en /etc/cron.hourly, cron lo ejecutará cada hora:
Fácil, ¿No?
5
#> cat /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Es desde este archivo desde el que nuestro cron ejecutará las tareas enlazadas
descritas en la sección 3.
5. Log de cron
En Debian 5 Lenny el log de cron viene desactivado por defecto. Para acti-
varlo tendremos que editar el fichero /etc/default/cron y eliminar la almohadilla
(#) del principio de la lı́nea EXTRA_OPTS="-L 2" dejando el fichero ası́:
# cat /etc/default/cron
# Cron configuration options
tail -f /var/log/syslog
6
6. Ejercicios sobre cron
1. Programe una tarea que cada 5 minutos escriba la fecha y hora del sistema
en un fichero /var/log/mi-cron.log.
2. Programe una tarea para que a las 20h. escriba ”Descanso de 5 minutos.”
en el terminal.
3. Programe una tarea que cada hora haga un tar, comprimido con gzip, de
su /etc y que lo guarde en /backup.
5. Haga una tarea a una hora determinada, la que usted quiera, que capture
las últimas lı́neas del log del sistema y se las deje en /root/ultimolog.txt.
23032009194520-root-bk.tar.gz
7
7. Programe un script que borre los backups, correspondientes al script del
ejercicio anteior, que sean más viejos de 24h. Este script de limpieza debe
ejecutarse cada dı́a.
9. Defina una tarea que apague el equipo todos los dı́as a las 23:59h.
10. Defina una tarea que encienda el equipo todos los dı́as a las 9h. (;-D).
13. Avanzado: Haga un script que mire la ocupación de disco de cada par-
tición montada en el sistema, cada 10 minutos, y que le envı́e un email a
root en caso de que alguna de ellas esté a más del 90 % de ocupación. El
email debe incluir la fecha y la hora, el nombre de la máquina, el punto
de montaje de cada partición y el porcentaje de ocupación.
8
7. Sobre esta unidad didáctica
7.1. Notas y advertencias
Debian: Esta guı́a está basada en el sistema Debian GNU/Linux, podrı́a
haber pequeños cambios si se aplica a otras distribuciones de GNU, pero en
su mayor parte funcionará bien con la excepción de lo referido al sistema de
paqueterı́a de programas, los comandos que empiezan por apt, ya que otras
distros no basadas en Debian podrı́an incorporar sistemas diferentes para el
manejo de sus paquetes.
7.2. Derechos
Esta guı́a se cede bajo contrato Coloriuris. Sólo puede ser utilizada previa
aceptación del contrato de cesión sito en:
http://www.coloriuris.net/contratos/ef5af6aaa441ab9c213273fade56dca1
Dicho contrato garantiza que estoy cediendo los derechos de uso y modifica-
ción sin ánimo de lucro.
7.3. Agradecimientos
El autor quiere reflejar su agradecimiento a todas las páginas de Internet
que ponen a disposición de todo el mundo sus contenidos, ası́ como a todo aquél
que publica artı́culos, manuales y experiencias en Internet, ya que eso favorece
a la difusión del conocimiento y al desarrollo humano. La información quiere
ser libre.
Un agradecimiento muy especial a toda la comunidad del Software Libre. Sin
ellos el autor vivirı́a en la oscuridad: Programadores, traductores, asociaciones,
hacktivistas, webmasters, etc...
También quiero agradecer muy especialmente su ayuda a mis alumnos y
lectores, por tomarse la molestia de comunicarme las erratas y por darme ideas
para mejorar los ejercicios.
7.4. Revisiones
El autor irá eventualmente publicando revisiones de esta unidad en su página
personal, y estará encantado de recibir sugerencias y dudas en la misma o en su
email:
http://jorgefuertes.com.
cursos@jorgefuertes.com.
Por supuesto se puede contactar con el autor para contratarle para hacer
nuevas unidades, adaptaciones, modificaciones, cursos, etc...