Programación de tareas en Linux. Comando 'at'
Diferencias entre contrab y at
Para programar tareas en GNU/Linux disponemos de dos herramientas:
- crontab
- at
crontab: Ejecuciones periódicas de uno o varios procesos.
at: Una unica ejecución de uno o varios procesos.
crontab: No mantiene el "entorno" en la ejecución.
at: Mantiene las variables de entorno y ruta de ejecución actual, así como cualquier otra variable definida en ese momento.
crontab: Es el más usado y conocido. Hay mucha documentacion sobre él.
at: Es un desconocido, pero que aporta grandes posibilidades.
crontab: Su servicio implicado en su ejecucion es el cron.
at: El servicio que facilita su ejecución es el anacron.
Comandos relacionados con at
at
1) Ejecuta comandos en la fecha y hora especificados una única vez. Además permite enviar un email como recordatorio de la tarea.
2) Permite ver el contenido de la tarea que se vaya a ejecutar.
atq
Muestra la cola/lista de trabajos existentes en la lista de tareas pendientes.
Comando alias de at -l
atrm
Permite eliminar una determinada tarea de la lista de tareas pendientes de ejecución.
Comando alias de at -r
Cómo crear una tarea única con at
Los pasos serían los siguientes:
1) Ejecutar el comando at indicando hora y día (opcional) en que se desee se ejecute la tarea.
2) Escribir cada comando a ejecutar en una línea, pulsar INTRO para finalizar la entrada de cada comando.
3) Finalizar la entrada de la tarea at, con CTRL+D
Cosas importantes a tener en cuenta:
a) Los comandos de ejecutan con /bin/sh no con /bin/bash
b) Si la hora de ejecución ya pasó la tarea no se ejecutará.
Sintaxis de at
at hora [fecha]
Ejemplos de uso:
# Tarea que se ejecutará a las 11:00 del dia actual
at 11:00
...
# Tarea que se ejecutará el primero Domingo (Sun) a las 20:00
at 20:00 Sun
...
# Tarea que se ejecutará a las 4:00 el 14/03/2023
at 04:00 2023-03-14
# Tarea que se ejecutará a las 4:00 el 14/03/2023
at 4am 22.10.14
...
Se permite usar at indicando un 'incremento' de tiempo:
# Ejecutar tarea dentro de 3 horas
at now + 3 hours
# Ejecutar mañana (incremento especial = + 1 days)
at 15:00 tomorrow
Ejemplo sencillo de uso de at
Queremos listar los ficheros que hay en la ruta /tmp el 26 de febrero de 2023.
Nota: Pulsar INTRO para finalizar cada línea
at 11:40 2023-02-26
ls -ltr /tmp > "~/prueba_comando_at.txt"
echo 'finalizado ' >> "~/prueba_comando_at.txt"
CTRL + D
Cuando llegue el día y la hora de ejecución veremos que en la ruta /home/<usuario> (~/) del usuario que programó la tarea, se habrá creado el fichero 'prueba_comando_at.txt' con el contenido que tenga en ese momento la ruta /tmp
Listar las tareas programadas
Para listar las tareas usaremos el comando atq
atq
9 Sun Feb 26 11:40:00 2023 a luisgulo
El primer número que aparece (en este caso el 9), es el número de tarea.
Como usuario sólo veremos nuestras tareas programadas
Como root veremos todas las tareas programadas, tanto las de root, como las de otros usuarios.
Las tareas se almacenan en el directorio: /var/spool/cron/atjobs
Ver el contenido de una tarea
Para ver el contenido usamos el comando at con una serie de parámetros:
at -c NumeroTarea
at -c 9
#!/bin/sh
# atrun uid=1000 gid=1000
# mail luisgulo 0
umask 22
...
GDM_LANG=es_ES.utf8; export GDM_LANG
HOME=/home/luisgulo; export HOME
LANG=es_ES.UTF-8; export LANG
...
USER=luisgulo; export USER
...
cd /home/luisgulo || {
echo 'Execution directory inaccessible' >&2
exit 1
}
ls -ltr /tmp > ~/prueba-at.txt
echo 'finalizado ' >> ~/prueba-at.txt
Vemos que se guardan todas las variables de la sesión actual que se tengan definidas y que la ejecución se ejecuta mediante /bin/sh
Eliminar tareas programadas
Una vez que tengamos el listado de tareas y su número (con atq), podemos eliminar las tareas que deseemos con el comando atrm
# Listar tareas actuales
atq
9 Sun Feb 26 11:40:00 2023 a luisgulo
# Borrar la tarea 9
atrm 9
Nota: También se pueden eliminar las tareas si las borramos desde el directorio en que se almacenan /var/spool/cron/atjobs
Resumen de la herramienta at y comandos asociados
Crear Tarea
● at hh:mm YYYY-MM-DD
Usar hora y fecha. Si se usa sólo la hora se ejecutará en el dia actual.
Escribir cada comando + INTRO
Finalizar creacion de tarea con CTRL+D
Listar Tareas / Ver contenido de la tarea
● atq / at -l
Se puede usar el comando at con el parámetro -l (listar)
● at -c Num
Ver los comandos que ejecutará la tarea Num
Borrar Tareas
● atrm Num / at -r Num
Se puede usar también at con el parámetro -r (remove/borrar)
Ruta de las Tareas
Todas las tareas se almacenan en el directorio: /var/spool/cron/atjobs