107.2 Lección 2
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
107 Tareas administrativas |
Objetivo: |
107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos |
Lección: |
2 de 2 |
Introducción
Como aprendimos en la lección anterior, puede programar tareas regulares usando crones, pero a veces puede necesitar ejecutar una tarea en un momento específico en el futuro. Para ello, es posible usar otra poderosa utilidad: el comando at
.
Programar tareas con at
El comando at
se utiliza para la programación de tareas una única vez y sólo requiere que se especifique cuándo se deba ejecutar una tarea en el futuro. Después de introducir at
en la línea de comandos, seguido de la especificación de tiempo, entrará en la línea de comandos at
donde puede definir los comandos a ejecutar. Puede salir del prompt con la secuencia de teclas Ctrl+D.
$ at now +5 minutes warning: commands will be executed using /bin/sh at> date at> Ctrl+D job 12 at Sat Sep 14 09:15:00 2019
El ejemplo anterior simplemente ejecuta el comando date
después de cinco minutos. Similar a cron
, la salida estándar y el error se envía por correo electrónico. Tenga en cuenta que el demonio atd
tendrá que estar ejecutándose en el sistema para que pueda usar la programación de at
.
Note
|
En Linux, el comando |
Las opciones más importantes que se aplican al comando at
son:
-c
-
Imprime los comandos de una tarea específica (por medio del ID) a la salida estándar.
-d
-
Borra las tareas basadas en su ID. Es un alias para
atrm
. -f
-
Lee las tareas desde un archivo en lugar de la entrada estándar.
-l
-
Lista las tareas pendientes del usuario. Si el usuario es root, se listan todas las tareas de todos los usuarios. Es un alias para
atq
. -m
-
Envía un correo al usuario al final de la tarea aunque no haya mostrado salida.
-q
-
Especifica una cola en forma de una sola letra de
a
az
y deA
aZ
(por defectoa
paraat
yb
parabatch
). Las tareas en las colas con las letras más altas se ejecutan con mayor prioridad. Los trabajos enviados a una cola con mayúsculas son tratados como tareasbatch
. -v
-
Muestra el tiempo en el que la tarea se ejecutará antes de leerla.
Listar tareas programadas con atq
Ahora programemos dos tareas más: la primera ejecuta el script foo.sh
a las 09:30 am, mientras que la segunda ejecuta el script bar.sh
después de una hora.
$ at 09:30 AM warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 13 at Sat Sep 14 09:30:00 2019 $ at now +2 hours warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 14 at Sat Sep 14 11:10:00 2019
Para listar sus tareas pendientes, puede usar el comando atq
que muestra la siguiente información para cada tarea: ID, fecha de ejecución, tiempo de ejecución, cola y nombre de usuario.
$ atq 14 Sat Sep 14 11:10:00 2019 a frank 13 Sat Sep 14 09:30:00 2019 a frank 12 Sat Sep 14 09:15:00 2019 a frank
Recuerde que el comando at -l
es un alias para atq
.
Note
|
Si ejecuta |
Borrar tareas con atrm
Si desea borrar una tarea de at
, puede usar el comando atrm
seguido del ID de la tarea. Por ejemplo, para borrar el trabajo con ID 14, puede ejecutar lo siguiente:
$ atrm 14
Puede borrar múltiples trabajos con atrm
especificando múltiples identificaciones separadas por espacios. Recuerde que el comando at -d
es un alias para atrm
.
Note
|
Si ejecuta |
Configurar el acceso a la programación de tareas
La autorización para que los usuarios ordinarios programen las tareas en at
está determinada por los archivos /etc/at.allow
y /etc/at.deny
. Si existe el archivo etc/at.allow
, sólo los usuarios que no son root listados en este pueden programar tareas at
. Si no existe /etc/at.allow
pero sí /etc/at.deny
, los usuarios que no son root listados en este no podrán programar tareas en at
(un archivo vacío /etc/at.deny
significa que cada usuario puede programar trabajos at
). Si ninguno de estos archivos existe, el acceso del usuario a la programación de trabajos at
depende de la distribución utilizada.
Especificaciones de tiempo
Puede especificar cuándo ejecutar una determinada tarea con at
utilizando el formato HH:MM
, opcionalmente seguido de AM o PM en caso de formato de 12 horas. Si la hora especificada ya ha pasado, se asume el día siguiente. Si quiere programar una fecha particular en la que se ejecutará el trabajo, debe añadir la información de la fecha después de la hora usando uno de los siguientes formatos: mes día-de-mes
, mes día-de-mes año
, MMDDYY
, MM/DD/YY
, DD.MM.YY
y YYYY-MM-DD
).
También se aceptan las siguientes palabras claves: midnight
, noon
, teatime
(4 pm) y now
seguido de un signo más (+) y un período de tiempo (minutos, horas, días y semanas). Por último, puede indicarle a at
que ejecute el trabajo hoy o mañana sufijando la hora con las palabras today
o tomorrow
. Por ejemplo, puede usar at 07:15 AM Jan 01
para ejecutar un trabajo a las 07:15 AM del 1 de enero y at now +5 minutes
para ejecutar un trabajo dentro de 5 minutos. Puede leer el archivo Timespec
en el directorio /usr/share
para más información sobre la definición exacta de las especificaciones de tiempo.
Una alternativa a at
Usando systemd como el administrador del sistema y de servicio, también puede programar tareas únicas con el comando systemd-run
. Normalmente se utiliza para crear una unidad de temporizador transitoria de modo que un comando se ejecute en un momento específico sin necesidad de crear un archivo de servicio. Por ejemplo, actuando como root, puede ejecutar el comando date
a las 11:30 AM el 2019/10/06 usando el siguiente comando:
# systemd-run --on-calendar='2019-10-06 11:30' date
Si quiere ejecutar el script foo.sh
, ubicado en su directorio de trabajo actual, después de dos minutos puede usar:
# systemd-run --on-active="2m" ./foo.sh
Consulte las páginas de man para aprender todos los usos posibles de systemd-run
con systemd-run(1)
.
Note
|
Recuerde que los temporizadores se registran en el diario del sistema y puede revisar los registros de las diferentes unidades usando el comando |
Ejercicios guiados
-
Para cada una de las siguientes especificaciones de tiempo, indique cuál es válida y cuál no lo es para
at
:at 08:30 AM next week
at midday
at 01-01-2020 07:30 PM
at 21:50 01.01.20
at now +4 days
at 10:15 PM 31/03/2021
at tomorrow 08:30 AM
-
Una vez que ha programado una tarea con
at
, ¿cómo puede revisar sus comandos? -
¿Qué comandos puede usar para revisar tu trabajos pendientes? ¿Qué comandos usaría para borrarlos?
-
Con systemd, ¿qué comando se utiliza como alternativa a
at
?
Ejercicios de exploración
-
Cree un trabajo que ejecute el script
foo.sh
ubicado en su directorio personal, a las 10:30 am del próximo 31 de octubre. Asuma que está actuando como un usuario ordinario. -
Entre en el sistema como otro usuario ordinario y cree otra tarea con
at
que ejecute el scriptbar.sh
mañana a las 10:00 am. Supongamos que el script se encuentra en el directorio principal del usuario. -
Entra en el sistema como otro usuario ordinario y crea otra tarea con
at
que ejecute el scriptfoobar.sh
justo después de 30 minutos. Supongamos que el script se encuentra en el directorio principal del usuario. -
Ahora como root, ejecute el comando
atq
para revisar los trabajosat
programados de todos los usuarios. ¿Qué pasa si un usuario ordinario ejecuta este comando? -
Como root, borre todos estos trabajos pendientes en
at
usando un solo comando. -
Ejecute el comando
ls -l /usr/bin/at
y examine sus permisos.
Resumen
En esta lección, aprendió:
-
Usar
at
para ejecutar trabajos una única vez en un momento específico. -
Administrar las tareas en
at
. -
Configurar el acceso de los usuarios a la programación de las tareas.
-
Utilizar
systemd-run
como alternativa aat
.
Los siguientes comandos y archivos fueron discutidos en esta lección:
at
-
Ejecuta comandos en un momento determinado.
atq
-
Muestra las tareas pendientes del usuario, a menos que el usuario sea el superusuario.
atrm
-
Borra las tareas de
at
, identificadas por su número de trabajo. /etc/at.allow
y/etc/at.deny
-
Archivos particulares usados para establecer restricciones de
at
. systemd-run
-
Crea e inicia una unidad transitoria de
tiempo
como alternativa deat
para la programación de una única vez.
Respuestas a los ejercicios guiados
-
Para cada una de las siguientes especificaciones de tiempo, indique cuál es válido y cuál no lo es para
at
:at 08:30 AM next week
Válido
at midday
Inválido
at 01-01-2020 07:30 PM
Inválido
at 21:50 01.01.20
Válido
at now +4 days
Válido
at 10:15 PM 31/03/2021
Inválido
at tomorrow 08:30 AM monotonic
Inválido
-
Una vez que ha programado una tarea con
at
, ¿cómo puede revisar sus comandos?Puede usar el comando
at -c
seguido del ID de la tarea cuyos comandos quiere revisar. Tenga en cuenta que la salida también contiene la mayor parte del entorno que estaba activo en el momento en que se programó el trabajo. Recuerde que root puede revisar los trabajos de todos los usuarios. -
¿Qué comandos puede usar para revisar sus trabajos pendientes? ¿Qué comandos usaría para borrarlos?
Puede usar el comando
at -l
para revisar sus trabajos pendientes, y puede usar el comandoat -d
para borrarlos.at -l
es un alias paraatq
yat -d
es un alias paraatrm
. Recuerde que root puede listar y borrar las tareas de todos los usuarios. -
Con systemd, ¿qué comando se utiliza como alternativa a
at
?El comando
systemd-run
puede ser usado como una alternativa aat
para programar trabajos de una sola vez. Por ejemplo, se puede usar para ejecutar comandos a una hora específica, definiendo un temporizador de calendario o un temporizador monótono relativo a diferentes puntos de inicio.
Respuestas a los ejercicios de exploración
-
Cree un trabajo que ejecute el script
foo.sh
ubicado en su directorio personal, a las 10:30 am del próximo 31 de octubre. Asuma que está actuando como un usuario ordinario.$ at 10:30 AM October 31 warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 50 at Thu Oct 31 10:30:00 2019
-
Entre en el sistema como otro usuario ordinario y cree otra tarea con
at
que ejecute el scriptbar.sh
mañana a las 10:00 am. Supongamos que el script se encuentra en el directorio principal del usuario.$ at 10:00 AM tomorrow warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 51 at Sun Oct 6 10:00:00 2019
-
Entre en el sistema como otro usuario ordinario y cree otra tarea con
at
que ejecute el scriptbar.sh
mañana a las 10:00 am. Supongamos que el script se encuentra en el directorio principal del usuario.$ at now +30 minutes warning: commands will be executed using /bin/sh at> ./foobar.sh at> Ctrl+D job 52 at Sat Oct 5 10:19:00 2019
-
Ahora como root, ejecute el comando
atq
para revisar los trabajosat
programados de todos los usuarios. ¿Qué pasa si un usuario ordinario ejecuta este comando?# atq 52 Sat Oct 5 10:19:00 2019 a dave 50 Thu Oct 31 10:30:00 2019 a frank 51 Sun Oct 6 10:00:00 2019 a emma
Si ejecuta el comando
atq
como root, todos las tareas deat
pendientes de todos los usuarios aparecen en la lista. Si lo ejecuta como un usuario ordinario, sólo sus propios trabajos pendientesat
serán listados. -
Como root, borre todos estos trabajos pendientes en
at
usando un solo comando.# atrm 50 51 52
-
Ejecute el comando
ls -l /usr/bin/crontab
. ¿Qué bit especial se establece y cuál es su significado?# ls -l /usr/bin/at -rwsr-sr-x 1 daemon daemon 43762 Dec 1 2015 /usr/bin/at
En esta distribución, el comando
at
tiene establecidos los bits SUID (el caracters
en lugar de la marca ejecutable para el propietario) y SGID (el caracters
en lugar de la marca ejecutable para el grupo), lo que significa que se ejecuta con los privilegios del propietario y del grupo del archivo (daemon
para ambos). Es por eso que los usuarios comunes pueden programar trabajos conat
.