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.
Antes de comenzar, debe verificar si 'at' está instalado en su sistema. No está instalado por defecto en todos los sistemas operativos.
Si el software ya está instalado, devolverá el número de versión. Si no, se puede instalar en sistemas basados en Debian escribiendo:
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.
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.
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 ] + ? |
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.