Programando tareas en GNU Linux

Se puede dar el caso en el que queremos que determinada tarea se ejecute automáticamente a cierta hora o cierto día. Linux nos ofrece algunas formas de hacerlo:

  • Esperar un tiempo y luego continuar con la ejecución del proceso con el comando sleep
  • Ejecutar un comando o lanzar un programa a una hora específica con el comando at
  • Ejecutar un comando o lanzar un programa regularmente a determinada hora en forma mensual, semanal o diaria con cron.

Mostraré el uso de estos comandos en consola y también una sencilla interfaz gráfica para cron.

Comando sleep

Este comando espera la cantidad de segundos pasados como parámetro. Podemos utilizarlo cuando deseemos ejecutar un proceso después de una cantidad de tiempo. Un ejemplo simple (pero sin utilidad) sería listar un directorio dentro de 60 segundos:

(sleep 60; ls /home/usuario ) &

Para cortar la ejecución presionar CTRL + c.

Comando at

At ejecuta un comando o programa a determinada hora determinado día. Su sintaxis es bastante sencilla.

Por ejemplo, si deseamos descargar determinado archivo a las 23:12, ejecutamos:

echo "wget http://www.empresa.com/archivo.txt" | at 23:11

El comando que va entre comillas luego de echo es el que se ejecutará a la hora indicada. Si deseamos hacerlo a las 23:11, pero de mañana, ejecutamos:

echo "wget http://www.empresa.com/archivo.txt" | at 23:11 tomorrow

El comando at soporta diferentes formatos de fecha/hora y también ofrece la posibilidad de leer los comandos a ejecutar de un archivo, para más información: man at

Cron y crontab

Este es más versátil que los anteriores. Cron ejecuta comandos y/o programas a determinados momentos de acuerdo a lo que cada usuario ha configurado en crontab (archivo en donde se guardan las tareas programadas). Es posible ejecutar programas en forma diaria, semana, mensual, etc. ¿Quieres tener un despertador que tenga como alarma tus mp3 favoritos? con cron puedes hacerlo.

Para agregar una tarea o modificar alguna, editamos el archivo crontab con el comando:

crontab -e

Abrirá el editor de textos Nano para modificar el archivo (para salir y guardar los cambios CTRL + X). Las entradas en el archivo siguen el siguiente formato:

<minutos> <hora> <día_mes> <mes> <día_semana> <comando>

Por ejemplo, deseamos ejecutar un script todos los días a las 23:30Hrs

30 23 * * * /home/usuario/mi_script.sh

Cada * significa “cualquiera”, es decir, se ejecutará a las 23:30 de cualquier día, cualquier mes y cualquier día de la semana.

Si deseamos ejecutar un script el día de navidad cada año:

00 00 25 12 * /home/usuario/saludo_navidad.sh

El 25 indica el día del mes y el 12 el mes del año, lo que daría 25 de Diciembre.

Si es que deseamos ejecutar un script todos los martes 13 a la 1am:

00 01 13 * 2 /home/usuario/script-martes-13.sh

El 13 indica el decimotercer día del mes, el * que le sigue indica que es cualquier mes y el 2 siguiente indica que se ejecute sólo los días martes (los días de la semana se numeran empezando con 1 para Lunes y terminando con 7 para domingo), así, si el 13 de enero cae jueves, no se ejecutará el script, pero si el 13 de abril cae martes, lanzará el script

Si es que deseamos tener Amarok como un despertador, empezando a tocar nuestra lista de reproducción de lunes a viernes a las 7am:

00 07 * * 1-5 amarok -p

Esto ejecutará el comando amarok -p (que le indica a Amarok que reproduzca nuestra lista actual) a las 07:00Hrs todos los días del mes, todos los meses y sólo de Lunes a Viernes (por eso el 1-5)

Para más información: man crontab

Cron y Crontab de una forma más amigable.

Algunos dirán: “Pero Linux es muy complicado, siempre usando la consola, en Windows yo hago esto en dos patadas…”. En estos casos, tenemos una amigable interfaz gráfica para Cron, en el caso de KDE, se llama KCron y la interfaz es bastante intuitiva. Para ejecutarlo, basta ir a Menú K / Sistema / KCron

La siguiente imagen muestra cómo establecer Amarok como alarma tal como en el ejemplo anterior:

KCron

Más fácil, imposible.

Gnome tiene también una interfaz para Cron, a saber, Gnome-schedule, lamentablemente no uso Gnome, por lo que no dejo capturas. Tal vez alguno de los lectores quiera contribuir…

Como siempre, cualquier comentario, sugerencia y/o aclaración son bien recibidos.

Entradas Relacionadas:
  • Búsquedas en Linux por consola
  • Revisando el espacio en disco en GNU/Linux
  • Curso de Administración de Sistemas en GNU / Linux
  • 7 Respuestas a “Programando tareas en GNU Linux”


    1. 1 markdbd

      Gracias por esta magnifica entrada de como programar tareas en Linux :) Me viene genial.

    2. 2 Koki

      Que bueno que te haya sido de utilidad

    3. 3 aparicio

      quiesiera saber la sintaxis de como ejecutar q se abra una pagina web a determinada hora y despues cerrarla, es q es necesario para ejecutar un proceso en mis sitio web…

      espero sus respuestas

    4. 4 Koki

      Aparicio: para abrir una página web a determinada hora, basta programar una tarea que ejecute, por ejemplo: firefox http://www.pagina.com.

      Para cerrar la página, podrías programar lanzar el comando killall firefox, que “mata” un proceso por el nombre.

    5. 5 aparicio

      Gracias por el tip al parecer solo era cuestion de hacer unas cuantas pruebas con las opciones, ademas utilice gnome-schedule y la verdad es sencillo y facil de usar, lo recomiendo

      y GRACIAS.. por la respuesta

    6. 6 Ictus

      Tu aportaciòn sobre los cron es de gran utilidad. Gracia sporque me has ayudado a entender algunas dudas.
      Por cierto.. sabes como deshabilitar a un usuario a determinada hora y volverlo a habilitar a otra???

    7. 7 Chris

      HÔla!!

      Gracias pÔr el apÔrte; intenté instalar el Gnome Schedule en mi equipÔ y tuve prÔblemas, ¿alguién puede ayudarme?, tengÔ el Ubuntu Ultimate 1.4 con escritÔriÔ GnÔme, cuandÔ intentaba instalar me aparecía que se requiere de un paquete llamadÔ ‘pygtk-2.0′.

      Gracias.
      EsperÔ que puedan apoyarme.

    1. 1 El Módem » Blog Archive » Revisando el espacio en disco en GNU/Linux
      Dirección Pingback a 2 Sep, 2007, 3:22 pm

    Añade un Comentario