107.2 Lección 2
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
107 Tareas Administrativas |
Objetivo: |
107.2 Automatización de tareas por medio del sistema programado |
Lección: |
2 de 2 |
Introducción
Como aprendimos en la lección anterior,
puede programar tareas regulares usando
archivos cron, 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
.