GNU/Linux >> Tutoriales Linux >  >> Linux

Programar trabajos en Linux con el comando 'at'

El comando at en Linux se puede usar para programar trabajos que no se ejecutan en un horario regular.

Se puede comparar con el concepto de Crontab en Linux, que es una mejor manera de automatizar tareas recurrentes.

En este tutorial, le mostraré cómo puede usar el comando 'at' para programar la ejecución de tareas y comandos en un momento determinado en el futuro.

Instalando en comando en Linux

Antes de comenzar, debe verificar si 'at' está instalado en su sistema. No está instalado por defecto en todos los sistemas operativos.

Puede comprobarlo escribiendo:

at -V

Si el software ya está instalado, devolverá el número de versión. Si no, se puede instalar en sistemas basados ​​en Debian escribiendo:

sudo apt install at

Si está utilizando una distribución de Linux diferente, es posible que deba modificar este comando para reflejar el administrador de paquetes utilizado por su distribución.

Cómo empezar

La 'utilidad at' es en realidad una serie de comandos que trabajan juntos para programar trabajos. Como ya mencioné, en se prefiere para situaciones en las que su tarea es más "única" que un evento recurrente.

He creado una tabla con algunos de los comandos básicos asociados con at .

Uso de at command en Linux para programar trabajos

Uso de en tiene su propio formato único. Cuando desee programar un trabajo, deberá escribir en su terminal:

at [time] [date/day]

La hora es obligatoria, pero la fecha es opcional, si no se ingresa nada, se hará una suposición basada en la fecha actual y la hora del sistema.

Cuando presione Intro, se le pedirá que ingrese comandos. Puede ingresar tantos como desee. Escribe 'ctrl + d' para guardar y salir.

Déjame mostrártelo con ejemplos.

Ejemplo 1:Introducir hora/fecha usando lenguaje natural

Tienes muchas opciones diferentes para ingresar el tiempo. A diferencia de crontab con su sistema basado en asteriscos algo complicado, 'at' reconoce la entrada "humana" de manera más eficiente.

Hay muchas expresiones similares a las humanas que el software puede entender. Muchos de estos son específicos de la localidad. Puede reconocer expresiones comunes como "medianoche" o "mediodía". También puede diferenciar entre AM y PM. Asimismo, puede reconocer diferentes formatos para días y fechas, incluyendo abreviaturas.

También puede utilizar la expresión "ahora". Simplemente puede ingresar el comando como se muestra a continuación y ejecutará el comando en 5 minutos.

at now + 1 minutes
[email protected]:~$ at now + 1 min
warning: commands will be executed using /bin/sh
at> echo "Look at you, using at like a champ!" > message.txt
at> <EOT>
job 8 at Mon Jan  6 02:59:00 2020

Lo más probable es que ignore la advertencia sobre bin/sh . Potencialmente podría causar un dolor de cabeza si está utilizando un shell diferente. La gran mayoría de las distribuciones de Linux vienen con bash como shell del sistema enlazado como "sh"... Es una larga historia.

Entonces, ha pasado alrededor de un minuto, ¿verdad? Busque en el directorio un archivo nuevo.

Deberías tener un archivo llamado 'mensaje.txt' que contenga nuestro texto.

[email protected]:~$ ls m*
message.txt

Se ve bien, pero ¿captó nuestro mensaje correctamente? Veamos el contenido del archivo:

[email protected]:~$ cat message.txt 
Look at you, using at like a champ!

Ejemplo 2:Uso de una hora/fecha especificada

Para su primer trabajo, utilizó el tiempo "relativo" 'ahora + [tiempo]'. Esta es una excelente manera fácil de programar un trabajo, pero es posible que desee ser más específico.

Esta vez, programemos 2 trabajos en diferentes momentos.

Puede usar el archivo message.txt (creado en el ejemplo anterior) para la demostración. Cada trabajo reemplazará el contenido del archivo.

Puede verificar la hora actual en su sistema Linux con el comando de fecha.

Configure el primer trabajo para un tiempo específico (5 minutos a partir de ahora):

[email protected]:~$ at 3:45 
warning: commands will be executed using /bin/sh
at> echo "5 minutes later..." > message.txt
at> <EOT>
job 11 at Mon Jan  6 03:45:00 2020

Configure el segundo trabajo para un tiempo específico (dentro de 10 minutos):

[email protected]:~$ at 3:50
warning: commands will be executed using /bin/sh
at> echo "10 minutes later..." > message.txt    
at> <EOT>
job 12 at Mon Jan  6 03:50:00 2020

Verificar a las 3:45:

[email protected]:~$ cat message.txt 
5 minutes later...

Verificar a las 3:50:

[email protected]:~$ cat message.txt 
10 minutes later...

Ejemplo 3:Ver todos los trabajos en cola con atq

En cualquier momento puede verificar los trabajos programados usando el comando atq. Enumerará todos los trabajos programados actualmente para el usuario que inició sesión. Para ver todos los trabajos en el sistema, es posible que deba usar privilegios elevados.

[email protected]:~$ atq
11    Mon Jan  6 03:45:00 2020 a christopher
12    Mon Jan  6 03:50:00 2020 a christopher

Cada trabajo se identifica mediante un ID de trabajo, su hora programada y el usuario asociado.

También puede ver el contenido del trabajo programado con la opción -c:

at -c jobnumber

Ejemplo 4:Eliminar un trabajo programado con atrm

Si decide cancelar un trabajo antes de que se ejecute, puede hacerlo escribiendo el comando seguido de su identificación de trabajo correspondiente (que puede obtener con el comando atq).

[email protected]:~$ atrm 11
[email protected]:~$ atq
12    Mon Jan  6 03:50:00 2020 a christopher

Como puede ver, el trabajo 11 se eliminó de la cola.

Ejemplo 5:Usar un archivo para at command

Tal vez tenga un conjunto de scripts que desea ejecutar de manera irregular y cron no es el adecuado. Puede ingresar múltiples trabajos sin usar la entrada estándar.

Imaginemos un escenario en el que Recursos Humanos solicita documentación sobre la actividad informática de un empleado que cree que está infringiendo la política de trabajo. Es posible que desee que ciertos registros de actividad u otra información del historial generen un informe para usted en momentos específicos.

Puede ahorrarse tiempo enumerando los scripts necesarios en un archivo de texto ejecutándolos con at.

[email protected]:~$ cat problem_employee_logs.txt 
path/to/get_browsing_history.sh
/whatever/path/get_activity_logs.sh

Entiendes la idea. Así que ahora, puede agregar -f al comando 'at' e incluir el nombre del archivo después de esta manera:

[email protected]:~$ at now + 2 minutes -f problem_employee_logs.txt 
warning: commands will be executed using /bin/sh
job 16 at Mon Jan  6 05:42:00 2020

Ejemplo 6:ejecutar un trabajo cuando la carga de la CPU cae por debajo de un umbral

Los trabajos por lotes se ejecutarán cuando el promedio de carga de la CPU caiga por debajo de 1,5 de forma predeterminada.

batch

El método para ingresar trabajos por lotes es idéntico a 'en ', excepto que no necesita especificarse un tiempo.

Si desea cambiar el umbral de carga, puede hacerlo con el siguiente comando:

atd -l [n]

Donde n es el umbral de carga que le gustaría elegir. La página de manual recomienda que lo cambie a un valor superior a n-1, donde n es el número de CPU en su sistema.

Conclusión

Gracias por leer. Espero que su comprensión del comando at haya mejorado. Si tiene alguna pregunta o le gustaría compartir cómo usa este comando, ¡díganos! Deja un comentario a continuación.


Linux
  1. Programar una tarea con Linux al mando

  2. Comando Linux Tee con ejemplos

  3. Comando JQ en Linux con ejemplos

  4. Cómo programar trabajos con el comando 'at' en Linux

  5. Cómo programar tareas usando at en Linux

Uso de Cat Command en Linux con ejemplos

Usando el comando GREP en Linux con ejemplos

Cómo automatizar trabajos diarios en Linux usando (at)

Usando el comando Watch en Linux

Usando el comando tr en Linux para jugar con personajes

Cómo programar trabajos con Cron en Linux

    Comando Función
    en permite al usuario programar tareas
    atq enumera los trabajos en cola para el usuario que ha iniciado sesión, o para todos los usuarios si se ejecuta como sudo
    atrm elimina trabajos por número de trabajo especificado
    lote instruye al sistema para que solo ejecute el trabajo a la hora especificada si la carga del sistema está en un cierto nivel (promedio de carga de <1.5)
    Todas las combinaciones de teclas [ ctrl + a ] + ?