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
atmediante los archivos/etc/at.allowand/etc/at.deny. Si estos archivos existen, solo los usuarios listados inat.allowpueden programar tareas, mientras que los incluidos inat.denyestán prohibidos. - Las tareas se ejecutan con el entorno de usuario que las programó, por lo que variables de entorno como
PATHpueden diferir de las de una sesión interactiva; es buena práctica usar rutas absolutas en los comandos. - Si el demonio
atdno 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
atno 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/rsyncinstead ofrsync). - Testea tu comando o script antes de programarlo con
atejecutá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 aat). - Revisa periódicamente la cola con
atqpara 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.