Programar tareas con el comando at en Linux

El comando at en GNU/Linux es una manera de programar distintas tareas que se ejecutarán una vez en la hora y fecha especificada

Para programar tareas en nuestros equipos con sistemas GNU/Linux que se repitan en el tiempo sin duda cron es la herramienta más conocida.

Con ella, podremos hacer que una tarea (léase script, programa, etc) se repita cuando deseemos. Todos los días a las horas especificadas, una vez a la semana, una vez al mes, etc.

Pero en esta ocasión vamos a ver el comando at que nos sirve para programar tareas, pero que no se van a repetir en el tiempo, si no únicamente se realizarán en la fecha y hora especificada y después se olvidarán.

¿Y para qué vamos a querer necesitar el comando at? Bueno, podemos utilizarlo para que actualice nuestro equipo a una hora determinada, o que cierre o ejecute tal aplicación en una fecha indicada, o que ejecute un script a una hora del día o apague nuestro equipo a media noche…

Este artículo es una traducción/adaptación del artículo en inglés escrito por Seth Kenlon para la web opensource.com publicado bajo licencia CC-by-sa.

El comando at nos permite ejecutar un comando o script (o varios comandos o scripts) una única vez a una fecha y hora indicada.

Seguro que en tu distribución de GNU/Linux ya tienes instalada este comando. Para que funcione correctamente debe estar corriendo el “demonio” o servicio atd (at daemon), para habilitarlo con si usas systemd ejecuta:

sudo systemctls enable --now atd

Creando tareas con at

Para crear tareas con at podemos utilizar el propio comando que nos abrirá un prompt en el que ir ingresando las tareas a ejecutar o hacer que lea la entrada estándar pasando los comandos mediante “tuberías”, ya sabes el símbolo |

Vamos a empezar con la propia interfaz de at, para ello en nuestra consola escribimos el comando y la hora a la que queremos que se ejecute nuestro comando. Para salir de la edición pulsaremos Ctrl-D

$ at 2:01 pm
warning: commands will be executed using /bin/sh
at Thu Aug 19 14:01:00 2021
at> touch archivo1.md
at> cp archivo1.md /home/victorhck/scripts
at> poweroff -h
at>
job 21 at Thu Aug 19 14:01:00 2021

La otra manera de crear una tarea es pasando el comando mediante la “tubería” con un comando, por ejemplo:

echo "touch xxx.md" | at now +1 minute

Como véis se pueden especificar hora a partir de la hora actual, por ejemplo la tarea anterior la realizará dentro de 1 minuto desde ahora mismo.

A diferencia de cron, el comando at es más “natural” a la hora de especificar las fechas y horas a las que queremos que se ejecute el comando. Se pueden utilizar los formatos de 24h o 12h indicando am/pm.

Si la hora indicada ya ha pasado, entonces el comando asumirá que será para esa hora, pero del día siguiente. También se pueden especificar fechas en formatos MMDDYY o MM/DD/YY (ya sabes, el mes antes del día) y horas en ese día.

También como hemos visto se pueden especificar horas a partir del momento actual con now, pero también admite midnight, noon o teatime (que son las 16:00):

echo "rm xxx.md" | at teatime +2 hours

Ver tareas programadas o eliminarlas

Las tareas programadas se pueden consultar (como usuario root) en la ruta /var/spool/atjobs

También podemos ver las tareas programadas mediante el comando at -l (-l de list) o atq (q de queue)

$ atq
23 Thu Aug 19 18:00:00 2021 a victorhck
21 Thu Aug 19 14:01:00 2021 a victorhck

El usuario root puede ver todas las tareas programadas de todos los usuarios del sistema.

Vemos que a cada tarea le precede un número, podremos borrar una tarea programada refiriéndonos a ese índice con el comando atrm o at -d

at -d 23


Este es un comando que he conocido recientemente y que parece muy útil para pequeñas tareas únicas no repetitivas que queremos ejecutar cuando queramos. ¿conocías y usabas ya este comando?

2 comentarios sobre “Programar tareas con el comando at en Linux

  1. Creo que lo usé 1 vez el comando (o lo intenté) hace muchos años pero ya ni me acordaba de que existía. Respecto a: “teatime (que son las 16:00)” si leyera esto un inglés le daba vuelta y vuelta al autor. 😛

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

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. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .