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 at se ejecutan en un entorno no interactivo. Asegúrate de que los comandos usen rutas completas o define PATH explícitamente en el script.
  • La salida del trabajo se envía por correo al usuario por defecto, a menos que se redirija.
  • batch es un comando relacionado que ejecuta trabajos cuando la carga del sistema baja de cierto umbral.
  • Consulta man at para ver la lista completa de formatos de tiempo.