El comando at en Linux: programar tareas puntuales

Introducción

En la administración de sistemas Linux, a menudo se necesita ejecutar un comando o script en un momento concreto del futuro sin mantener una sesión abierta. Mientras que cron gestiona tareas recurrentes, el comando at está diseñado para trabajos puntuales que se ejecutan una sola vez. Este artículo explica qué es at, cómo se instala, su sintaxis y ejemplos prácticos para programar tareas de forma rápida y segura.

Qué es el comando at

El comando at pertenece al paquete at y permite especificar una hora de ejecución para cualquier comando o secuencia de comandos. Al invocarlo, at abre un prompt interactivo donde se escribe la orden; al finalizar con Ctrl+D, el trabajo se guarda en la cola de at y se ejecuta en el momento indicado. El demonio atd vigila la cola y lanza los procesos cuando llega su hora.

Instalación y verificación

En la mayoría de distribuciones at ya está instalado. Si falta, se instala con el gestor de paquetes:

  • En Debian/Ubuntu: sudo apt-get update && sudo apt-get install at
  • En Fedora: sudo dnf install at
  • En Arch Linux: sudo pacman -S at

Tras la instalación, active el demonio:

sudo systemctl enable --now atd

Verifique su estado con systemctl status atd.

Sintaxis básica

La forma más simple de usar at es:

at HH:MM

Después de pulsar Enter, se abre el prompt at> donde se escribe el comando o los comandos que se desean ejecutar. Al terminar, se pulsa Ctrl+D (o se escribe EOF) para cerrar la entrada y programar la tarea.

También se puede pasar la entrada directamente desde un pipe o un archivo:

echo 'comando a ejecutar' | at HH:MM

O bien:

at HH:MM < archivo.txt

Ejemplo práctico

Para mostrar un recordatorio a las 15:00:

at 15:00
> echo 'Reunión en 5 minutos'
> Ctrl+D

El mensaje aparecerá en la terminal a la hora indicada.

Fecha y hora avanzada

El comando acepta formatos como now + 30 minutes, at 22:00 tomorrow o at 10:00 2025-12-31. También permite usar expresiones como teatime (que equivale a 16:00).

Gestión de trabajos

Liste los trabajos pendientes con atq. Elimine un trabajo con su número usando atrm número. Varios números se separan por espacios.

Ventajas sobre cron

  • No requiere editar el crontab del sistema ni del usuario.
  • Permite especificar una hora exacta con facilidad, incluso usando lenguaje natural como now + 45 minutes.
  • El proceso se elimina automáticamente de la cola después de su ejecución, evitando acumulación de entradas obsoletas.
  • Es útil en scripts que necesitan programar una acción futura basada en una condición detectada en tiempo de ejecución.

Limitaciones y consideraciones de seguridad

  • Dependiendo de la configuración del sistema, algunos usuarios pueden estar restringidos para usar at mediante los archivos /etc/at.allow and /etc/at.deny. Si estos archivos existen, solo los usuarios listados in at.allow pueden programar tareas, mientras que los incluidos in at.deny están prohibidos.
  • Las tareas se ejecutan con el entorno de usuario que las programó, por lo que variables de entorno como PATH pueden diferir de las de una sesión interactiva; es buena práctica usar rutas absolutas en los comandos.
  • Si el demonio atd no está en ejecución, las tareas nunca se lanzarán. Verifica su estado después de reinicios.
  • En entornos muy restringidos (contenedores, sistemas embebidos) puede que at no esté disponible o que su uso esté desactivado por políticas de seguridad.

Buenas prácticas

  • Always use absolute paths for binaries and scripts (e.g., /usr/bin/rsync instead of rsync).
  • Testea tu comando o script antes de programarlo con at ejecutándolo directamente en la terminal.
  • Registra la salida de las tareas programadas redirigiéndola a un archivo de log: echo '/ruta/script.sh' | at 02:00 > /var/log/mi_tarea.log 2>&1 (aunque la redirección se hace dentro del comando que pasas a at).
  • Revisa periódicamente la cola con atq para asegurarte de que no quedan trabajos olvidados.
  • Documenta en un wiki o cuaderno de operaciones las tareas puntuales que programas, especialmente si afectan a producción.

Conclusión

El comando at es una herramienta ligera y poderosa para programar ejecuciones únicas en sistemas Linux. Su sintaxis sencilla, la capacidad de aceptar entrada desde stdin o archivos y su integración con el demonio atd lo hacen ideal para situaciones donde cron resultaría excesivo. Al comprender su funcionamiento, sus opciones de fecha/hora y las mejores prácticas de uso, los administradores pueden automatizar tareas puntuales de forma fiable y segura, mejorando la eficiencia del día a día en la gestión de servidores y estaciones de trabajo.