Este artículo fue publicado originalmente en go2linux.org el 6 de agosto de 2008. El dominio ya no me pertenece, pero soy el autor original. Lo republico aquí en garron.me con correcciones y mejoras.
Introducción
El comando at programa un comando o script para que se ejecute una sola vez en un momento futuro. A diferencia de cron, que ejecuta tareas de forma recurrente, at es para ejecución diferida de una única vez.
Instalación
En Debian y Ubuntu:
sudo apt-get install at
El demonio atd debe estar activo para que at funcione:
sudo systemctl enable --now atd
Uso básico
Leer comandos desde un archivo:
at now + 5 minutes < $HOME/comandos.txt
O introducir comandos de forma interactiva. Escribe at <hora> y pulsa Enter. Verás el prompt at>. Escribe cada comando en una línea nueva. Pulsa Ctrl+D cuando termines:
$ at now + 1 hour
at> echo "Trabajo terminado" | mail -s "Hecho" [email protected]
at> <EOT>
job 3 at Mon Jun 8 15:00:00 2026
Formatos de tiempo
at acepta expresiones de tiempo muy flexibles:
| Expresión | Significado |
|---|---|
| now + 5 minutes | 5 minutos desde ahora |
| now + 2 hours | 2 horas desde ahora |
| now + 3 days | 3 días desde ahora |
| noon | Hoy a las 12:00 |
| midnight | Esta noche a las 00:00 |
| teatime | Hoy a las 16:00 |
| 2:30 PM | Hoy a las 14:30 |
| 10:00 AM tomorrow | Mañana a las 10:00 |
| 10:00 Jun 15 | El 15 de junio a las 10:00 |
| DD.MM.YY | Fecha específica |
Gestión de trabajos en cola
Listar trabajos pendientes:
atq
Eliminar un trabajo por su ID:
atrm 3
Inspeccionar los comandos de un trabajo:
at -c 3
Ejemplo práctico: apagar el equipo después de un tiempo
echo "shutdown -h now" | at now + 30 minutes
Útil cuando inicias una descarga larga y quieres que el equipo se apague automáticamente al salir.
Alternativa moderna: systemd-run
En sistemas con systemd (la mayoría de las distribuciones Linux modernas), systemd-run ofrece una funcionalidad similar sin necesitar el demonio atd:
systemd-run --on-active=30m shutdown -h now
Esto programa un apagado en 30 minutos. Para cancelarlo, busca el nombre de la unidad transitoria con systemctl list-timers y detenla:
systemctl stop run-NNNNN.timer
at sigue siendo la opción más portable: funciona en sistemas sin systemd, su sintaxis de tiempo es más legible y se integra con el correo del sistema para notificar la salida del trabajo.
Notas
- Los trabajos de
atse ejecutan en un entorno no interactivo. Asegúrate de que los comandos usen rutas completas o definePATHexplícitamente en el script. - La salida del trabajo se envía por correo al usuario por defecto, a menos que se redirija.
batches un comando relacionado que ejecuta trabajos cuando la carga del sistema baja de cierto umbral.- Consulta
man atpara ver la lista completa de formatos de tiempo.