Mundo Pau

septiembre 4, 2009

Crontab tu programador de tareas en linux.

Filed under: Informática — Perdigue @ 07:44
Tags: , , ,

Este manual explica como funciona la función crontab de Linux. Esto nos servirá para realizar multitud de tareas y programarlas cada cierta periodicidad.
Crontab es un programa derivado del genuino Cron. Seguro que muchos de vosotros habéis programado una tarea que habéis visto en algún manual con un simple copy y paste. Todos sabemos para que vale pero lo mas importante de esto no es que solo funcione. Lo mas importante es saber usarlo para que cuando necesitemos ejecutar algo en una fecha especifica sepamos como hacerlo y a continuación os voy a explicar el como, donde y porque del asunto …

Cron viene instalado en la mayoría de distribuciones Linux actuales incluyendo Linux Ubuntu y Linux Debian mas que nada para la actualización de ficheros Logs y demás cosas que a simple vista no vemos pero en segundo plano están cumpliendo su función.

Para la configuración de tareas vamos a usar el programa crontab que viene con el paquete cron y que nos va a servir para configurar nuestras tareas automáticas de un modo muy simple.

La manera de decirle que queremos que algo se ejecute en nuestro ordenador un día a una hora especifico es muy sencilla pero hay que entenderla.

Imaginemos que necesitemos que una vez a la semana se comprima todo un directorio completo y nos cree un fichero en formato tar.gz para tener una copia de seguridad. Ademas vamos a suponer que lo necesitamos todos los días de lunes a viernes a las 4:30 de la mañana …

Para comenzar vamos a editar crontab desde una Terminal y ejecutando …

sudo crontab -e

Editor crontab

Editor crontab

Como veis el archivo parece complejo pero no tiene mucha complicación una vez lo entendamos. En mi caso necesito hacer una copia de seguridad del directorio /home/servidor/datos y que me lo comprima en el fichero backupweb.tar.gz situado en /home/servidor/datos/Backup-Server para hacer esto simplemente deberíamos ejecutar tar -czf /home/servidor/datos/Backup-Server/backupweb.tar.gz /home/servidor/datos/ web pero además de indicarle esto debemos indicarle que minuto, hora, día del mes … Para ello le indicaremos delante del comando de compresión tar lo siguiente …

Crontab explicación

Crontab explicación

30 4 * * 1-5 tar -czf /home/servidor/datos/Backup-Server/backupweb.tar.gz /home/servidor/datos/web

Como veis le indico que se ejecute:

  1. 30 A la media
  2. 4  A las 4 de la mañana
  3. * Todos los dias del mes
  4. * Todos los meses del año
  5. 1-5 De lunes a Viernes (lunes=1; viernes=5)

Ahora solo tenemos que reiniciar cron para que los cambios se apliquen.

sudo /etc/init.d/cron restart

Con esto hemos programado una tarea de forma facil y rápida.

Otro ejemplo, seria aplicar cron para borrar un directorio cada 5 minutos.

0-59/5 * * * * rm  /var/log/samba/*log.*

Con esta orden indicaremos que se borre el directorio de log de samba cada 5 minutos.

9 comentarios »

  1. esta buena las instrucciones me han a claro un poco lo que quiero, gracias.
    pero en realidad lo que que yo quiero lograr es porgramar el crontab para que cada cada 4 horas convierta unos archivos que genero en .wav a mp3 y estos se encuentran en diferentes directorios

    Comentario por Don Vic Burdeos — enero 25, 2010 @ 22:55 | Responder

    • Para poder realizar esto debes instalar ffmpeg, a continuación programas la siguiente tarea:

      ffmpeg -i original.wav -acodec mp3 -ab 32 -ar 44100 salida.mp3

      donde:
      * -i original.wav, indica que el archivo de entrada se llama original.wav, recuerda de poner la ruta completa.
      * -acodec mp3, indica que el codec de audio del archivo resultante será MP3 [esto en realidad se prodría omitir, puesto que la extensión del archivo de salida indica a ffmpeg que el codec es MP3]
      * -ab 32, indica que el bitrate del archivo de salida será de 32 kbps
      * -ar 44100, inidica que el archivo de salida tendrá una frecuencia de 44100 Hz [esto en realidad se prodría omitir, puesto que la frecuencia por defecto es 44100 Hz]
      * salida.mp3, es el nombre que tendrá el fichero resultante, recuerda de poner la ruta completa.

      Con esto ya lo tienes.
      Para que esta tarea se realize cada cuatro horas deberias de poner en el gestor de tareas de crontab la siguiente linea.

      0 1-24/5 * * * ffmpeg -i original.wav -acodec mp3 -ab 32 -ar 44100 salida.mp3

      Recuerda reiniciar cron, para que los cambios tenga efecto.

      Comentario por Perdigue — enero 26, 2010 @ 22:28 | Responder

  2. gracias por si decides ayudarme

    Comentario por Don Vic Burdeos — enero 25, 2010 @ 22:56 | Responder

  3. hola como podria hacer un programador de tareas para que cada semana se copie a un disco extraible que esta conectado mediante un cable USB

    Comentario por macu — noviembre 11, 2010 @ 14:30 | Responder

    • Pues seria una cosa asi:

      $ sudo crontab -e

      A continuación introduces la siguiente tarea:

      30 4 * * 1 tar -czf /[ruta de lo que quieres grabar] /media/[destino]

      La copia se realizaria a las 4:30 h todos los lunes (lunes = 1, martes= 2, … domingo = 7)

      Si no te recomiendo que utilizar un programa más completo como Backup Manager
      https://perdigue.wordpress.com/2009/09/01/hacer-copias-de-seguridad-en-linux/

      Comentario por Perdigue — noviembre 11, 2010 @ 15:20 | Responder

  4. Hola tengo muchas dudas en relación a la utilización de crontab, yo tengo dos plantillas del archivo bannedsitelist una se llama plantilla_habilitada y la otra se llama plantilla_restringida.

    de lunes a viernes a las 8 am ejecuto en el directorio “/etc/dansguardia/lists” el siguiente comando “cp plantilla_restringida bannedsitelist” y luego ejecuto el deminio “/etc/init.d/ansguardian restar” para que el Dansguardian tome los cambios.

    Luego a las 12 m y entre las 12m y las 2:00 pm copio la plantilla_habilitada y reinicio el demonio ya que en ese intervalo de tiempo habilito el uso de facebook para los usuarios.

    a las 2 pm vuelvo a restringir el uso de facebook copiando la plantilla_restringida, reinicio el demonio hasta las 4pm que vuelvo a habilitar el facebook hasta las 8 am del día siguiente.

    Realmente quiero hacer esto de manera automática utilizando las tareas programadas pero no me funciona, seguro lo estoy utilizando mal.

    Gracias de antemano por la ayuda

    Comentario por Julio Alvarez — marzo 3, 2011 @ 14:38 | Responder

    • Siento la tardanza pero no me pillas en mi mejor estado de salud.
      Te comento lo que haría yo.
      1.-Abrimos el programador de tareas.
      $ sudo crontab -e
      2.- Añadimos el siguiente texto en el programador de tareas.
      00 8 * * 1-5 cp /etc/dansguardia/lists/plantilla_restringida etc/dansguardia/lists/bannedsitelist
      01 8 * * 1-5 /etc/init.d/ansguardian restart
      00 12 * * 1-5 cp /etc/dansguardia/lists/plantilla_habilitada etc/dansguardia/lists/bannedsitelist
      01 12 * * 1-5 /etc/init.d/ansguardian restart
      00 14 * * 1-5 cp /etc/dansguardia/lists/plantilla_restringida etc/dansguardia/lists/bannedsitelist
      01 14 * * 1-5 /etc/init.d/ansguardian restart
      00 16 * * 1-5 cp /etc/dansguardia/lists/plantilla_habilitada etc/dansguardia/lists/bannedsitelist
      01 16 * * 1-5 /etc/init.d/ansguardian restart

      3.- Finalmente reiniciaria el crontab para aplicar los cambios.
      $ sudo /etc/init.d/cron restart
      Con esto creo que cumple todos los objetivos que me has pedido.

      Comentario por Perdigue — marzo 4, 2011 @ 18:19 | Responder

  5. muy interesante, bastante claro, ahora me darías una idea de como ejecutar un conjunto de instrucciones como por ejemplo en mi caso, exportar datos con el comando exp del oracle y luego comprimir el archivo resultante con nombre de archivo fecha y hora de la compilación?

    Comentario por Martin — marzo 23, 2011 @ 15:40 | Responder

    • Pues tal como dice lo unico que tendrias que hacer es añadir todo lo que quieras hacer en una linea de consola, para que se ejecute a la vez

      Comentario por Perdigue — marzo 23, 2011 @ 19:29 | Responder


RSS feed for comments on this post. TrackBack URI

Responder

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

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: