Programar una tarea para un momento concreto desde la terminal de Ubuntu 14.04 LTS

Hace unos días, aprendimos a Programar una tarea repetitiva desde la terminal de Ubuntu 14.04 LTS. Sin embargo, en ocasiones, en lugar de realizar tareas de forma periódica, lo que necesitamos es ejecutar algo, sólo una vez, pero en un momento particular del futuro. Para cumplir con ese objetivo, disponemos del comando at.

La forma más rápida de abrir la ventana de terminal consiste en pulsar la combinación de teclas Alt + Control + T.

A pesar de que se trata de un comando muy habitual, en Ubuntu no se encuentra instalado de forma predeterminada, pero, como está almacenado en sus repositorios oficiales, para obtenerlo, sólo tendremos que escribir una orden como esta:

sudo apt-get install at

1

Escribimos la contraseña y, poco después, tendremos instalado el programa.

A partir de aquí, cada vez que ejecutamos el comando at se pondrá en funcionamiento el servicio atd que controlará el momento exacto en el que se ejecute el comando que le hayamos indicado.

El comando at guarda los valores de las variables de entorno y el directorio actual para utilizarlos en el momento de ejecutar la tarea. Así, no le afectarán los cambios que se produzcan después de programarla.

Por ejemplo, si quiero que se apague el ordenador de forma automática cuando lleguen las 20:16, comenzaré por escribir en la consola una orden como esta:

sudo at 20:16

Ten en cuenta que estamos utilizando el comando con privilegios de root por que apagar el equipo es una tarea administrativa.

2

Como cabe esperar, el sistema nos pide la contraseña. La escribimos y pulsamos la tecla Intro.

Cuando pretendamos ejecutar programas que utilicen la interfaz gráfica, comenzaremos por escribir el comando export DISPLAY=:0 para identificar la pantalla donde deben aparecer.

Veremos que aparece un prompt específico de at donde escribimos los comandos que queramos que se ejecuten. Cuando escribamos el nombre de más de un comando o programa, debemos saber que no se iniciará la ejecución del segundo mientras se esté ejecutando el primero (aunque haya pasado el momento en el que debería iniciarse). La intención de este comportamiento es que podamos programar tareas que estén formadas por varias subtareas que deban ejecutarse por orden. Si necesitamos varias tareas que puedan iniciar su ejecución de forma simultánea sólo tendremos que ejecutar at varias veces.

Cuando hayamos terminado de escribir, pulsamos la combinación de teclas Ctrl + D. En la pantalla aparecerá la marca <EOT>.

3

El aspecto de la terminal será parecido al de la imagen.

Cuando llegue la hora indicada, comprobarás que el ordenador comienza a apagarse exactamente igual que si lo estuviésemos apagando manualmente.

La expresión del momento en el que se producirá la ejecución atiende a la forma at [hora] [fecha] y se puede expresar de las siguientes formas:

  • Hora: Indica la hora en la que se llevará a cabo la acción y se puede expresar en cualquiera de los formatos siguientes: HH:MM, HHMM, HH.MM, HH,MM, Hpm, Ham. Donde H ó HH será un valor entero que representa las horas, MM un valor entero que representa los minutos y am ó pm antes del medio día o después del medio día (12:00). Además, se pueden utilizar las palabras midnight que se corresponde con las 00:00, noon que representa las 12:00, now que sustituye a la hora actual y teatime que corresponde a las 16:00
  • Fecha: Representa la fecha en la que se ejecutará la acción. Se puede escribir en inglés, utilizando el formato mes día año (por ejemplo, june 17 2013). Incluso podemos suprimir el año cuando nos referimos al actual. También podemos utilizar diferentes formatos numéricos: DD.MM.AA, MMDDAA, MM/DD/AA, AA-MM-DD. Donde DD será un valor entero que representa el día, MM un valor entero que representa el mes y AA otro entero que representa el año. Además, se pueden utilizar las palabras today, que representa la fecha de hoy, tomorrow que hace referencia a la fecha de mañana y el nombre de los días de la semana (en inglés), que hace referencia a la próxima fecha cuyo día de la semana coincida con el indicado.
  • Otra forma de expresar un momento es con la palabra now seguida de un número y una unidad de tiempo. Por ejemplo, si queremos ejecutar una tarea mañana podríamos escribir now + 1 day. Este formato acepta las siguientes unidades de tiempo: min (minutos), minute (minutos), hour (horas), day (días), week (semanas), month (meses) y year (años).

Aquí tienes algunos ejemplos:

at 2pm june 17
at 1013 31.05.14
at teatime tomorrow
at 9:15 today + 5 day
at now + 1 hour
at 08,25 sunday

Una forma sencilla de consultar los trabajos que tiene pendientes el servicio atd es utilizando el comando atq:

sudo atq

4

Se muestra el número de trabajo, la fecha y la hora, la cola y el nombre del usuario al que pertenecen.

Ten en cuenta que, cuando no utilizamos el comando atq con privilegios administrativos, mostrará los trabajos pendientes del usuario actual.

Si lo prefieres, en lugar de atq puedes utilizar at con el argumento -l:

sudo at -l

5

Aunque, como puedes ver, la salida es completamente equivalente.

Si lo que queremos es comprobar exactamente qué es lo que se va a ejecutar, podemos utilizar el argumento -c, seguido del número de trabajo a examinar, aunque no es objetivo de esta documentación explicar en detalle su contenido:

at -c 2

6

Vemos que se ha creado un script más complejo al que, al final, se le ha añadido el comando que queremos ejecutar.

También podemos eliminar los trabajos pendientes con el comando atrm. Lógicamente, hay que indicar el número de trabajo que queremos eliminar:

sudo atrm 3

7

Aquí podemos comprobar cómo se ha eliminado el trabajo 3

En lugar de atrm, también puedes utilizar el comando at con el argumento -d.

Con esto, hemos aprendido lo básico para aplazar la ejecución de cualquier comando hasta el momento que más nos convenga. Espero que te resulte útil.