Como agregar tareas al Cron de Linux

12/11/2007
By

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

Popularity: 14% [?]


Otros articulos de interes:

  1. Como agregar un usuario de Unix a un Grupo
  2. Como agregar rutas estaticas en Centos/ClearOS
  3. Se desaparecio la barra de tareas de KDE y como recuperarla
  4. Como agregar Google plus1 a tu blog de WordPress
  5. Optimizar MySQL para WordPress

Tags: crond, crontab, crontabs, el demonio

22 Responses to Como agregar tareas al Cron de Linux

  1. Alejandro Aguilar on 06/07/2011 at 08:34

    Hola porfavor me pueden colaborar con lo siguiente.
    necesito realizar un cron que me diga cuales ip de las que ya tengo asignadas a un canal estan pasando por el , necesito que la informacion me la envie a un archivo plano…
    si alguien sabe, le agradezco la ayuda que me pueda brindar ya que no se como se hace y necesito realizarlo lo más pronto posible

  2. Confundido on 11/02/2011 at 13:31

    Tengo un problema en la ejecución de un shell atravez del cron ..lo tengo calendarizado para que se ejecute de lunes a viernes a las 13:34 … si lo ejecuta pero al utilizar la variable del date para generar mi archivo me pones 6 horas de mas… por que ???

    34 13 * * 1,2,3,4,5 /export/home/mqm/soportemq/CHECKLIST_MQ.sh

    Nombre del archivo generado:
    VALIDACION_VESP_11-02-2011_19:34.txt

  3. Yosip on 10/07/2010 at 11:56

    Una Pregunta:

    Quisiera sacar un Backup de mi Base de datos completa llamada prueba todos los dias a las 3 am a traves de cron, cual seria la instruccion que deberia colocar.

    Gracias por la respuesta

  4. Mauricio on 31/05/2010 at 09:30

    CORRECCIÓN:

    Para programar días de la semana en crontab, deberá escribirse un número entre 0 y 6, donde 0 es el primer día de la semana o sea domingo, ¡¡¡DOMINGO!!!

    NOTA:
    Les recomiendo que tomen sus precauciones cuando lean este blog, por mi parte nunca más lo volveré a visitar.

    • asdf on 17/05/2012 at 10:30

      Wn lloron

  5. andres isaac on 11/04/2010 at 15:05

    conchale necesito una ayuda saludos primero q todo,!! yo tengo mi servidor Squid proxy en debian-linux, pero como hago para hacer el borrado de la cache para no hacer esta tarea manual sino que la haga automaticamente mi sistema

    • fher98 on 12/04/2010 at 11:16

      Para que queres borrar la cache?

Leave a Reply

Your email address will not be published. Required fields are marked *

*