Como agregar tareas al Cron de Linux

Que es Cron

Para poder automatizar tareas sobre sistemas Linux/Unix se utiliza la herramienta Cron. Comunmente se utiliza para sacar copias de seguridad (backups) de archivos, o una tarea que debe de ser ejecutada en un horario especifico. Como ejemplo les puedo mencionar que este sitio realiza un backup de su base de datos diariamente en un horario donde estadisticamente no hay muchas visitas para luego mandar ese backup por medio de scp a otro servidor remoto, y todo esto con una tarea asginada en el cron.

Como funciona el Cron

A decir verdad, no existe un programa llamado cron, lo que si existe es el programa crontab y el demonio crond. Entonces,

Con el programa crontab ingresamos los comandos en un archivo de texto, los cuales seran guardados automaticamente en el directorio /var/spool/cron/crontabs. Por ejemplo para el usuariox sus tareas del cron se guardan en /var/spool/cron/crontabs/usuariox.

El demonio crond lee periodicamente los archivos del crontab y ejecuta los comandos guardados dentro de esos archivos en el horario que fueron programados.

La interfaz del crontab viene distribuida de la siguiente manera:

Seis columnas m h dom mon dow command, las cuales no siempre se muestran en el crontab del usuario.

Columnas del crontab

m minutos 0-59
h horas 0-23
dom dia del mes 1-31
mon mes 1-12 (o nombre del mes en ingles, como jan, feb, etc)
dow dia de la semana 0-6 siendo 0 el dia domingo
command El comando que sera ejecutado

Como ejemplo podemos pensar en:

0 1 24 5 0 /scripts/comando.sh

La linea anterior correra el comando a la 1:00AM, el dia lunes 24 de Mayo. Que es lo mismo si lo escribimos asi:

0 1 24 may mon /scripts/comando.sh

Ahora bien, que pasa si queremos correr un comando cada hora sin importar la fecha? Un asterisco * es interpretado por el cron como ejecutar el comando especificado toda vez que sea posible segun la columna. Asi que para correr un comando automaticamente via cron cada hora, escribimos en el crontab lo siguiente:

0 * * * * /scripts/comando.sh

Lo cual sera ejecutado todos los dias, cada hora en el minuto 0, en otras palabras a la hora en punto.

Esto permite especificar una variacion de los campos. Digamos que necesitamos ejecutar un comando cada dos horas, para esto escribimos en el campo de hora */2, lo cual sera ejecutado a las 2, 4, 6, 8 etc.

Tambien es posible la utilizacion de comas para indicar la ejecucion mas de una vez. Digamos que queremos ejecutar el comando treinta minutos despues de la hora en punto, y luego cuarenta y cinco minutos despues. Especificamos en el campo minuto asi: 30,45.

Si se escribe un gion – entre dos valores, esto incluira todos los valores en ese intervalo de tiempo. Como ejemplo podemos imaginar correr un comando la primera semana del mes. Con este fin en el dia del mes escribimos: 1-7.

Asi que para correr el comando cada 2 horas, treinta minutos despues de la hora en punto y quince minutos antes de la siguiente hora en punto durante los 7 primeros dias del mes, escribimos en el crontab:

30,45 */2 1-7 * * /scripts/comando.sh

Para guardar la salida del comando en un archivo de texto, podemos escribirlo asi en el crontab:

0 * * * * /scripts/comando.sh >> /home/user/crontab.log

Por default, la salida es enviada por correo a la cuenta del administrador del sistema, para evitarnos esto agregamos lo siguiente al comando:

0 * * * * /scripts/comando.sh >> /home/user/crontab.log 2>&1

Igualmente, si no se requiere ninguna salida del comando, esta puede ser redirigida a /www.null:

0 * * * * /scripts/comando.sh >> /www.null 2>&1

Obviamente la idea del cron es tener alguna informacion de lo que ha ejecutado, de lo contrario es bastante inutil. Pero a veces esta de mas tener guardada la misma informacion.

Creo que se me habia olvidado mencionar la forma de usar crontab para hacer que crond ejecute nuestros comandos. Para crear o editar las entradas del cron, utilizamos el comando crontab -e, lo cual abrira un editor de texto en el cual podemos agregar las entradas al cron, una por linea.

El comando crontab -e ejecuta vi por default. Si se quiere utilizar otro editor de texto se puede cambiar la variable de entorno VISUAL.

deathbian:~# export VISUAL='pico -w'

Para ver todas las entradas creadas en el cron tecleamos el siguiente comando:

deathbian:~# crontab -l

Si queremos borrar todas las entradas al crontab de un usuario tecleamos crontab -r, con el usuario que deseamos borrar sus entradas en el cron.

Nota: El superusuario root puede editar los crontabs de otros usuarios tecleando: crontab -e -u usuario

Tambien es posible correr todos los scripts en un mismo directorio a una hora determinada, agregando una entrada como la siguiente en el crontab

0 * * * * run-parts /scripts/hour.cron/

Pueden encontrar mas ejemplos como este en /etc/crontab.

Como siempre, sus dudas y sugerencias son bienvenidas….!!

Actualizacion

Ejecutar cron en Solaris 10

Para poder agregar o simplemente editar un trabajo en el cron de Solaris 10, debemos exportar la variable de UNIX indicando el editor que abrira el archivo de crontab, tecleando:

export EDITOR=vi

Terminos de busqueda

  • cron linux
  • crontab linux
  • linux cron
  • crontab examples
  • crontab linux ejemplos
  • cron en linux
  • linux crontab
  • crontab en linux
  • crontab ejemplos
  • crontab debian
  • 25 Comments

    1. Pepe 13/11/2007
      • fher98 13/11/2007
    2. Joel Cristobal 23/02/2008
      • fher98 26/02/2008
    3. ELENA SOLIS 28/02/2008
      • fher98 04/03/2008
    4. ignacio 01/06/2008
    5. Marte2501 21/07/2008
    6. orfeos 19/05/2009
      • fher98 19/05/2009
    7. orfeos 19/05/2009
    8. Marcelo 10/07/2009
    9. Cat 11/09/2009
      • fher98 14/09/2009
    10. aallende 02/04/2010
    11. andres isaac 11/04/2010
      • fher98 12/04/2010
    12. Mauricio 31/05/2010
      • asdf 17/05/2012
    13. Yosip 10/07/2010
    14. Confundido 11/02/2011
    15. Alejandro Aguilar 06/07/2011
    16. reiner 02/10/2012
    17. acidb1 27/05/2014
      • acidb1 27/05/2014

    Comentario, Preguntas o agradecimientos?

    %d bloggers like this: