Cómo programar la ejecución de tareas con el comando At en Linux

1 mar 2021 5 min di lettura
Cómo programar la ejecución de tareas con el comando At en Linux
Indice dei contenuti

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, use am o pm después de la hora. También puede usar cadenas como now, midnight, noon o la teatime (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 los MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY o [CC]YY-MM-DD.
  • Incremento: at también acepta incrementos de la forma now + count time-unit, donde count es un número y time-unit puede ser uno de los siguientes: minutes, hours, days, o weeks.

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

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.