31
ago
07

Programador de tareas en Ubuntu (cron)

En Ubuntu, cron es el “Administrador de tareas” en segundo plano (demonio) que ejecuta programas a intervalos regulares (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.

Los usuarios habilitados para crear su archivo crontab se especifican en el archivo cron.allow. De manera análoga, los que no lo tienen permitido figuran en /etc/cron.d/cron.deny, o /etc/cron.deny, dependiendo de la versión de unix.

Cómo programar una tarea en crontab 

Nada mejor que un ejemplo del archivo crontab 

skrdz@root:#crontab -e                      (Ignora ésto… //Espero que lo abra en nano  =D  )

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
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 archivo crontab correspondiente al usuario que está logueado.

Cada vez que se ejecuta el crontab, se envía un mail al usuario que aparece en la variable de entorno MAILTO, si está habilitado, indicándole la tarea realizada.

La sintaxis en sí…

El símbolo Numeral “#” es un comentario, todo lo que se encuentre después de ese carácter no será ejecutado por cron. El momento de ejecución se especifica de acuerdo con la siguiente tabla:

  • Minutos: (0-59)
  • Horas: (0-23)
  • Días: (1-31)
  • Mes: (1-12)
  • Día de la semana: (0-6), siendo 1=Lunes, 2=Martes, … 6=sábado y 0=Domingo

Para especificar todos los valores posibles de una variable se utiliza un asterisco (*).
La última columna corresponde al path absoluto del binario o script que se quiere ejecutar.

Por ejemplo:

24 12 * * 1 /usr/bin/who >> /home/hola.txt
Ejecuta la orden who todos los lunes a las 12:24 y guarda la salida en el archivo hola.txt

Para especificar dos o más valores en cada variable, estas deben estar separadas por comas, siguiendo con el ejemplo anterior:

0,24 * * * 1 /usr/bin/who >> /home/hola.txt

Ejecuta la orden who todos los lunes cada media hora y guarda la salida en el archivo hola.txt

Si queremos que se ejecute cada 15 minutos sería:

0,15,30,45 * * * * /usr/bin/who >> /home/quien.tex
ó
*/15 * * * * /usr/bin/who >> /home/quien.tex
En este ejemplo veremos como pasarle mas de un comando al cron y de paso como puede programarse una descarga:

30 21 * * * cd /media/sda7/dexter/distributions/isos;wget http://hola.com/archivo_a_descargar.loquesea

Este otro es para programar el apagado de la PC. En este caso todos los sábados a las 9:30 pm.

30 21 * * 6 /sbin/shutdown -h now

Espero que les haya servido!!! A mi me sirvió para programarle a moodle correr el script necesario para que envíe los correos de los foros o información importante a los estudiantes.

About these ads

18 Responses to “Programador de tareas en Ubuntu (cron)”


  1. 1 Ana
    octubre 16, 2007 en 4:15 pm

    Gracias por la información :) . Una antigua usuaria de Gentoo…

  2. octubre 29, 2007 en 8:45 pm

    Hola, sabes, precisamente tengo el problema con moodle. necesito programar el envio de correos a los foros a una hora en la madrugada, ya que es la hora de menos carga de mi servidor de correo. Yo pensaba en bajar el postfix local y levantarlo solo para el envio de moodle al servidor de correo, pero leyendote dices qu e programaste el script. ¿Me podrías indicar como lo hiciste?.
    muchas gracias por tu ayuda

    Fabian

  3. 3 skrdz
    octubre 31, 2007 en 1:38 pm

    Bueno fabian, como sabras moodle tiene, en la parte de notifiaciones, el script cron.php con el cual se hace ésto del envío de todos los correos y creo que hace más cosas, pero principalmente sé que sirve para ésto. Yo lo que hice es modificar de la siguiente manera el crontab:

    15,30,45 * * * * wget -q -0 /dev/nul http://localhost/moodle/admin/cron.php

    Con ésto se envían los correos cada 15 minutos, si lo que quieres es a la media noche, solo modificas los * para dejarlo como quieras (según el post éste).
    OJO que debes de haber configurado la parte de correo dentro del moodle en: Administración del sitio/Servidor/Email

    Saludos! Espero que te sirva.
    PD: Lo siento por la tardanza

  4. 4 tenshi
    junio 3, 2009 en 11:47 pm

    Programar ambas copias conel cron, y el fichero ha de estar comprimido.

    Realizar una copia de seguridad del directorio /home/tenshi/Documentos con las siguientes caracteristicas:

    -Una copia total el dia 27 de cada mes
    -Una copia diferencial el resto de dias

    como se haria esto?

    • junio 4, 2009 en 1:52 am

      Bueno, empezaré con respecto a los comandos…

      Para hacer el respaldo full del 27, me imagino que puedes hacer:

      tar vzf /media/punto-de-respaldo/mi.tar.gz /home/tenshi/Documentos

      Esa línea de comando te empaqueta y te comprime tu directorio. Para hacer los respaldos incrementales sería el comando:

      tar –update -v -f /home/tenshi/bk/mi.tar /home/tenshi/Documentos

      Ésto te creará (la primera vez) un archivo tar con el contenido de tus Documentos (ojo que no va comprimido… por lo que investigué, no permite hacer ésto cuando esta comprimido…), pero lo bonito de éste comando es que, si tu modificas o agregas archivos dentro de tu carpeta -Documentos- y luego ejecutas dicha linea de comando, el comando tar solo enviará los archivos actualizados o nuevos al archivo tar.

      Si tu entras al archivo generado .tar, verás que ahí están varias versiones de tu archivo, pero sin embargo, si tu extraes dicho tar te darás cuenta de que te pondrá la última actualización de los archivos.

      En síntesis, te podría quedar tu cron de ésta forma:

      #Línea 1: Copia diferencia día a día
      0 18 * * * tar –update -v -f /home/tenshi/bk/mi.tar /home/tenshi/Documentos

      #Línea 2: Copia total el día 27 de cada mes
      0 19 27 * * tar vzf /media/punto-de-respaldo/mi.tar.gz /home/tenshi/Documentos

      Espero que te sirva ésta información, y hasta me dan ganas de hacer una entrada de blog de ésto porque es muy interesante realizar copias incrementales con tar.

      Saludos!

  5. 6 tenshi
    junio 5, 2009 en 2:11 pm

    Gracias por la información. Ahora ya puedo hacerme copias de seguridad, porque no es la primera vez que pierdo la info. ^^ enormemente agradecido. si creas alguna entrada con más info estaria encantado de pasarme por ahi. Un saludo y gracias.

  6. 7 carlos
    junio 5, 2009 en 9:56 pm

    skrdz, usted sabría o alguien sabria hacer esto?

    -Crear un shell script con un menú de 4 opciones:

    1ºCopia total en /tmp/total
    2ºCopia incremental en /tmp/incremental
    3ºCopia diferencial en /tmp/diferencial
    4ºSalir

    Características:

    La fecha de las copias incremental y diferencial se pasa como parámetro.
    Los nombres de los ficheros deben hacer referencia a las fechas de las copias.

  7. 8 Paloma
    julio 29, 2009 en 8:36 am

    Buenas mi duda es si se puede programar sin repeticion.
    Es decir solo quiero posponer un exportacion de base de datos a la madrugada de ese día.
    Porque si pongo
    * 2 * * *
    ¿lo ejecutara a las 2 de la mñn de todos los dias?
    Muchas gracias de antemano

    • septiembre 11, 2009 en 6:38 pm

      Bueno, cuando pones:
      * 2 * * *

      Le estas diciendo que ejecutará la(s) instruccion(es) desde las 2 de la madrugada de ése mismo día hasta la eternidad…

      Debes de tomar en cuenta que * sirve para especificar todos los valores posibles de una variable, por lo que el primer * esta significando que lo hará en cada minuto que pase y así mismo con las demás variables.

      Lo que quieres hacer (programar sin repetición) sería más o menos así:
      0 2 11 9 5

      Donde las primeras dos variables te indican que se ejecutará a las 2 en punto de la madrugada (0=en punto). 11 significa el día del mes, 9 sería el mes (septiembre) y 5 sería el día viernes, osea éste mismo día que subo éste comentario.

      Así solo se ejecutaría una sola vez, aunque tengo una duda… como no se parametriza el año, será que hay posibilidad que se cumpla dicha condición en un futuro? Si alguien conoce la respuesta, que la ponga.

      Espero haberte ayudado Paloma (mil años después por cierto jjejeje). Saludos!

  8. 10 ibrahim
    septiembre 14, 2009 en 10:24 pm

    hola mira cree un script para realizar un respaldo .sh al ejecutarlo mediante consola si funciona sh respaldo.sh pero la momento de colocarlo en el corn (corontab – e) no pasa nada el editor esta asi:

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    HOME=/

    # m h dom mon dow command

    30 05 * * * sh /home/mantenimiento/cron/respaldo.sh

    #

    que tengo mal o como puedo comfigurarlo

    • septiembre 14, 2009 en 10:40 pm

      bueno, creo que hay un error porque estas poniendo 05… debes de quitar el “certo” y dejar el cinco. Te quedaría así:

      30 5 * * * sh /home/mantenimiento/cron/respaldo.sh

      Pruébalo y me avisas. Si no se soluciona, la cuestión es de permisos pero estoy casi seguro que así solucionas tu problema.

      Saludos!

  9. 12 DarkRenba12145419
    septiembre 23, 2009 en 9:25 am

    Un saludo foreros muy buenos comentarios y.. buenos post esta info es muy util gracias por compratir
    pero bueno al grano les explico mi situación

    comenze a trabajar hace poco en administracion de redes en una empresa y.. la cosa es que enrealidad estoy haciendo la practica XD osea que mas trabajo, y lo que me encargaron es poder mandar mail publicitario de la empresa cosa que ya esta solucionado claro que casi muero en el intento XP solucionamos el asunto contratando a una perosona que montara y nos explicara la forma de … montar el servidor y las aplicaciones para el envio, lo que resulto en Instalar ubuntu 9.04 desktop mas servidor Lamp con la aplicacion de interspire mail marketer ver5.6 “NULLED”
    (estoy en pos de hacer una guia del proceso de montado y configuracion del sistema y si alguien la quiere me mande un mail y le hago llegar la guia a lo que la termine envien un mp a dark1214519@hotmail.com)
    XD

    y depues fue un logro poder encontrar un servidor de correo para poder enviar los mail ya que no podia salir con Gmail ni con yahoo ni hotmail por un asunto de tls o autenticación, con tal que encontre un probehedor de mail que me permite hasta el momento salir con la no despresiable cifra de 10000 mail por dia o bueno eso es lo que mandamos en horas de trabajo de 9:00am hasta las 6:30pm (18:30) jejeje
    y bueno ya todo funcando y lo demas lo que necesito es poder mandar mas mail por hora por lo que supe la aplicacion soporta 1000 correos por minuto pero con la ventana popup del mismo solo manda aproximadamente 1000 por hora y para poder mandar mássssssss lo tengo que hacer con crontab como podria hacerlo??? o como o de donde podria encontrar una guia para utilizar bien este comando de unix “cron” , “crontab” o como seria su sintaxis no espero que hagan mi trabajo solo quiero un poco de ayuda por que harto dificil que se me ha hecho esto
    tube que parender a ocupar linux de la noche a la mañana XD cosa genial por que cada ves amo mas a GNU UNIX/LINUX y bueno tengo poca experiencia en linux pero he aprendido bastante estas ultimas semanas porque yo era wintendero XP pro osea que solo conocia WINTENDO jajajaja por que solo un jugete o para jugar pero para cosas mas cabronas hasta el 2000server 2003server y otros se caen …..

    les agradeceria su repuesta y apollo…

  10. 14 DarkRenba1214519
    septiembre 23, 2009 en 1:50 pm

    bueno gracias por la respuesta pronta
    si quieres ver como funciona la cosa y … el programa funcionando mandame un mail pribado a
    dark1214519@hotmail.com para pasarte mi direccion y acordar para habilitarte un usuario y pass para que veas el interspire email marketer y te explico algunos detalles de funcionamiento por que dentro de sus funciones tiene integrado parametros cron y acceso php en fin algo que no entiendo muy bien hasta el momento

  11. 15 DarkRenba1214519
    septiembre 24, 2009 en 8:52 am

    bueno bueno lo que necesito es

    levantar mi propio servidor smtp
    que necesito
    tengo ip publica pero no tengo dominio
    tengo ubutnu 9.04 destop funcionando como server Lamp
    apache mysql php y sies que algun otro servicio no lorecuerdo XD
    por fabor help me!!!

    la guia esta en proceso .. me va a demorar mas de lo que crei por que la estoy haciendo con todos los pasos osea desde cero
    instalando el sistema operativo
    los servicios
    Lamp
    aplicaciones web “phpmyadmin” “interspire email marketer”
    lo mas importante que aun no logro hacer funcar servidor smtp interno (ocupo uno externo y no me dan servicio de envio en masa XD)
    y por supuesto como extra una guia de como utilizar el interspire email marketer todo esto con sus aplicaciones en una archivo RAR o los link de donde pueden sacar la info pliss ayudaaaa

    Necesito saber como montar el smtp
    y utlizar cron para enviar mail por esta aplicacion “interspire email marketer” que tiene soporte php


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: