Archivo de la etiqueta: cronjobs

Como ejecutar una tarea periódicamente en Ubuntu (Linux)

Esta programación periódica de tareas no sirve solamente para el uso en el ordenador personal, si no que también nos puede ser útil en el servidor. Estas tareas consisten en trabajos que el ordenador tiene que realizar cada determinado periodo de tiempo sin interferir con la UI.

Para conseguir tal objetivo todas las distribuciones Linux (incluyendo Ubuntu), y otros sistemas operativos basados en Unix, nos brindan la posibilidad de usar “Crontab”. El nombre proviene del antiguo dios griego Chronos encargado del tiempo.

Para ver las tareas que tenemos ejecutándose de forma periódica en nuestro sistema podremos usar el comando:

crontab -l

Si queremos modificar el fichero y añadir nuevos cronjobs deberemos usar el comando:

crontab -e

Este comando nos abrirá nuestro editor por defecto (en mi caso vi). Una vez dentro deberemos escribir una linea parecida a:

* * * * * /ruta/al/script.sh

 y si guardamos tal script será ejecutado regularmente en el margen de tiempo indicado. Cada asterisco representa una unidad de tiempo distinta. Ordenada en:

  • minutos ( de 00 a 59)
  • horas (de 0 a 23)
  • día del mes (de 1 a 31)
  • mes (de 1 a 12)
  • día de la semana( de 0 a 6) { Se empieza en domingo = 0 }

Los asteriscos tienen el significado de “todos”. Por lo que en este ejemplo significa que el script se ejecutará todos los minutos de todas las horas, de todos los días, de todos los meses, de todos los días de las semanas.

Para ejecutarlo el viernes a la 1 de la mañana:

0 1 * * 5 /ruta/al/script.sh

Si sólo queremos que se ejecute de lunes a viernes (el guión “-” nos permite indicar intervalos de tiempo):

0 1 * * 1-5 /ruta/al/script.sh

Para ejecutarlo cada diez minutos (las comas concatenan tiempos):

0,10,20,30,40,50 * * * * /ruta/al/script.sh

 pero también:

 */10 * * * * /ruta/al/script.sh

Dónde podemos apreciar porciones, evitándonos el uso de comas.

Los asteriscos, o indicaciones de tiempo, se pueden substituir por palabras protegidas.

@reboot Se ejecuta una vez al arranque
@yearly Se ejecuta una vez al año “0 0 1 1 *”
@annually (lo mismo que @yearly)
@monthly Se ejecuta una vez al mes “0 0 1 * *”
@weekly Se ejecuta una vez a la semana “0 0 * * 0″
@daily Se ejecuta una vez al dia “0 0 * * *”
@midnight (lo mismo que @daily)
@hourly Se ejecuta una vez cada hora “0 * * * *”

 

*/10 * * * * /ruta/al/script.sh >> /var/log/script_output.log 2>&1

 Empezando por el final, “2>&1” significa que tipo de información deseamos guardar. El “1” hace referencia al “standard output” y el “2” referencia a los “standard errors”. En el medio vemos “>>” que con solo una flecha significa que el fichero se sobre escribiría pero como lo que queremos es ir guardándolo todo, deberemos poner las dos flechas para que vaya añadiendo las nuevas lineas al final del documento. Tened en cuenta que si el cronjob lo ejecutas a menudo este fichero puede crecer con bastante velocidad causando problemas. Por lo que si queréis desechar lo que salga del script podéis usar

*/10 * * * * /bin/execute/this/script.sh > /dev/null 2>&1

Dónde “/dev/null” es un agujero negro que descarta toda la información que le llega.

Finalmente si queréis hacer limpieza podéis usar el siguiente comando:

crontab -r

Espero que os haya gustado y os haya servido! :)