Introducción
at
es una utilidad de línea de comandos que le permite programar comandos para que se ejecuten en un momento determinado. Los trabajos creados con at
se ejecutan solo una vez.
En este artículo, explicaremos cómo usar at
y algunas de sus utilidades como batch
, atq
, atrm
para ver, eliminar y crear trabajos para ejecutarlos posteriormente.
Instalar en
Dependiendo de la distribución, at
puede o no estar presente en el sistema Linux.
Si at
no está instalado, puede instalar fácilmente usando el gestor de paquetes de su distribución.
Instalar en Ubuntu y Debian
sudo apt update
sudo apt install at
Instalar en CentOS y Fedora
sudo yum install at
Daemon atd
Una vez que el programa esté instalado, asegúrese de que el atd
esté ejecutando y configurado para iniciarse en el arranque:
sudo systemctl enable --now atd
Cómo usar el comando at
La sintaxis simplificada del at
es la siguiente:
at [OPTION...] runtime
El at
acepta la fecha y la hora ( runtime
) cuando desea ejecutar el trabajo (trabajo) como un parámetro de línea de comando.
Creemos un trabajo que se ejecutará a las 9:00:
at 09:00
Una vez que presione Enter
, se le presentará en el símbolo del sistema at
que muy a menudo comienza con at>
. También se muestra una advertencia que indica el shell en el que se ejecutará el comando:
warning: commands will be executed using /bin/sh
at>
Ingrese uno o más comandos que desee ejecutar:
tar -xf /home/noviello/file.tar.gz
Cuando haya terminado de ingresar los comandos, presione Ctrl-D
para salir del indicador y guardar el proceso:
at> <EOT>
job 4 at Tue May 5 09:00:00 2020
El comando mostrará el número de trabajo y la hora y fecha de ejecución.
También hay otras formas de usar el comando que desea ejecutar además de ingresar el comando at
indicador at. Una forma es usar echo
y redirigir el comando a at
:
echo "command_to_be_run" | at 09:00
Otra opción es usar Heredoc:
at 09:00 <<END
command_to_be_run
END
Para leer comandos de un archivo en lugar de la entrada estándar, invoque el comando con la -f
siguiendo la ruta del archivo. Por ejemplo, para crear un trabajo que ejecutará el script /home/noviello/script.sh
:
at 09:00 -f /home/noviello/script.sh
De forma predeterminada, si el comando produce una salida, at
enviará un correo electrónico con la salida al usuario una vez que se complete el trabajo. Invocar at
la -M
opción para suprimir la notificación por correo electrónico:
at 09:00 -M
Utilice -m
para enviar un correo electrónico incluso si no hay salida:
at 09:00 -m
Comando por lotes
batch
o su alias at -b
programa trabajos y los ejecuta en una cola de lotes cuando la carga del sistema lo permite. De forma predeterminada, los trabajos se ejecutan cuando la carga media del sistema es inferior a 1,5
. El valor de carga se puede especificar al invocar el demonio atd
Si el promedio de carga del sistema es mayor que el especificado, los trabajos esperarán en la cola.
Para crear un batch
, pase los comandos que desea ejecutar:
echo "command_to_be_run" | batch
Especifique el tiempo de ejecución
La at
acepta una amplia gama de especificaciones de tiempo. Puede especificar la hora, la fecha y el incremento desde la hora actual:
- Hora: para especificar una hora, utilice el
HHMM
HH:MM
o HHMM. Para indicar un formato de hora de 12 horas, useam
opm
después de la hora. También puede usar cadenas comonow
,midnight
,noon
o lateatime
(16:00). Si ha transcurrido el tiempo especificado, el trabajo se ejecutará al día siguiente. - Fecha: el comando le permite programar la ejecución del trabajo en una fecha específica. La fecha se puede especificar utilizando el nombre del mes seguido del día y un año opcional. Puede utilizar cadenas como
today
,tomorrow
o día de la semana. La fecha también se puede indicar utilizando losMMDD[CC]YY
,MM/DD/[CC]YY
,DD.MM.[CC]YY
o[CC]YY-MM-DD
. - Incremento:
at
también acepta incrementos de la formanow + count time-unit
, dondecount
es un número ytime-unit
puede ser uno de los siguientes:minutes
,hours
,days
, oweeks
.
La hora, la fecha y el incremento se pueden combinar, aquí hay algunos ejemplos:
Programe un trabajo para el próximo domingo diez minutos después de la hora actual:
at sunday +10 minutes
Programe un trabajo para que se ejecute a las 13:00 en dos días:
at 1pm + 2 days
Programe un trabajo para que se ejecute a las 12:30 del 21 de octubre de 2020:
at 12:30 102120
Programe un trabajo para que se ejecute en una hora:
at now +1 hours
También puede especificar una fecha y hora [[CC]YY]MMDDhhmm[.ss]
utilizando la opción -t
Aquí hay un ejemplo:
at -t 202005111321.32
Especifica la cola
Por defecto, los trabajos creados con at
son programadas en cola denominada a
y puestos de trabajo creados con batch
están programadas en la cola b
.
Las consultas se pueden nombrar a
a z
y A
a Z
Las colas con letras más bajas funcionan con menor precisión, lo que significa que tienen prioridad sobre aquellas con letras más altas.
Puede especificar la cola con la opción -q
Por ejemplo, para configurar un trabajo en la L
, ejecute:
at monday +2 hours -q L
Lista de trabajos pendientes
Para enumerar los trabajos pendientes del usuario, ejecute el atq
o at -l
:
atq
La salida mostrará una lista de todos los trabajos, uno por línea. Cada fila incluye el número de trabajo, la fecha, la hora, la letra de la cola y el nombre de usuario.
9 Tue May 5 12:22:00 2020 a noviello
12 Wed Oct 21 12:30:00 2020 a noviello
15 Tue May 5 09:00:00 2020 a noviello
6 Tue May 5 09:00:00 2020 a noviello
13 Mon May 4 23:08:00 2020 a noviello
11 Wed Jul 1 10:00:00 2020 a noviello
4 Tue May 5 09:00:00 2020 a noviello
Cuando atq
como usuario administrativo, se enumerarán los trabajos pendientes de todos los usuarios.
Eliminar trabajos pendientes
Para eliminar un trabajo pendiente, invoque el atrm
o at -r
seguido del número de trabajo. Por ejemplo, para eliminar el trabajo con el número nueve, haga lo siguiente:
atrm 9
Restringir usuarios
Los /etc/at.deny
y /etc/at.allow
permiten controlar qué usuarios pueden crear trabajos con los comandos at
o batch
Los archivos constan de una lista de nombres de usuario, un nombre de usuario por línea.
Por defecto, solo existe el archivo /etc/at.deny
y está vacío, lo que significa que todos los usuarios pueden usar el comando at
. Si desea denegar el permiso a un usuario específico, agregue el nombre de usuario a este archivo.
Si el /etc/at.allow
existe, solo los usuarios enumerados en este archivo pueden usar el comando at
Si no existe ninguno de los archivos, solo los usuarios con privilegios administrativos pueden usar el comando at
Conclusión
La at
lee los comandos de la entrada estándar y los ejecuta más tarde. A diferencia de crontab, los trabajos creados con at
run solo una vez.
Para obtener más información sobre todas las opciones disponibles del at
, escriba el siguiente comando en la terminal:
man at