ch02 Todo
ch02 Todo
ch02 Todo
Resumen
Para obtener una lista completa de las especificaciones de tiempo válidas, consulte la definición
timespec como se indica en las referencias.
Inspección y administración de trabajos de usuario diferidos
Para obtener una descripción general de los trabajos pendientes de su usuario, use el comando atq o los
comandos at -l.
[user@host ~]$ atq
28 Mon Feb 2 05:13:00 2015 a user
29 Mon Feb 3 16:00:00 2014 h user
27 Tue Feb 4 12:00:00 2014 a user
En la salida anterior, cada línea representa un trabajo diferente programado para ejecutarse en el futuro.
Indica que el trabajo está programado con la cola predeterminada a. Se pueden programar
diferentes trabajos con diferentes colas.
Importante
Los usuarios no privilegiados solo pueden ver y controlar sus propios trabajos. El
usuario root puede ver y administrar todos los trabajos.
Para inspeccionar los comandos reales que se ejecutarán cuando se ejecute un trabajo, use el comando
at -c JOBNUMBER. Este comando muestra el entorno para el trabajo que se configura para reflejar el
entorno del usuario quien creó el trabajo en el momento en que se creó, seguido de los comandos reales
que se ejecutarán.
Eliminación de trabajos
El comando atrm JOBNUMBER elimina un trabajo programado. Elimine el trabajo programado cuando
ya no es necesario; por ejemplo, cuando una configuración de firewall remota dio un resultado
satisfactorio, y no es necesario que se restablezca.
Referencias
Páginas del manual: at(1) y atd(8)
/usr/share/doc/at/timespec
Ejercicio guiado: Programación de un trabajo de usuario
diferido
En este ejercicio, usara el comando at para programar varios comandos para ejecutar en momentos
específicos en el futuro.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
Programar un trabajo para que se ejecute en un momento específico en el futuro
Inspeccionar los comandos que ejecuta un trabajo programado
Eliminar los trabajos programados
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab scheduling-at start para comenzar el ejercicio. Este script asegura
que el entorno esté limpio y configurado correctamente.
[student@workstation ~]$ lab scheduling-at start
2. Programe un trabajo para ejecutar en tres minutos a partir de ahora usando el comando at. El
trabajo debe guardar la salida del comando date en /home/student/myjob.txt.
3. Use el comando watch atq para monitorear la cola de los trabajos diferidos en tiempo real.
El trabajo se elimina de la cola después de su ejecución.
[student@servera ~]$ watch atq
Every 2.0s: atq servera.lab.example.com: Thu Mar 21 12:30:00 2019
La salida anterior coincide con la salida del comando date, confirmando que el trabajo
programado se ejecutó con éxito.
3. Use el comando at para programar interactivamente un trabajo con la cola g que se ejecuta en
teatime (16:00). El trabajo debe ejecutar un comando que imprima el mensaje It's
teatime (Es la hora del té) en /home/student/tea.txt. Los nuevos mensajes deben
adjuntarse al archivo /home/student/tea.txt.
[student@servera ~]$ at -q g teatime
warning: commands will be executed using /bin/sh
at> echo "It's teatime" >> /home/student/tea.txt
at> Ctrl+d
job 2 at Thu Mar 21 16:00:00 2019
4. Use el comando at para programar interactivamente otro trabajo con la cola b que se ejecuta en
16:05. El trabajo debe ejecutar un comando que imprima el mensaje The cookies are
good (Las galletas están bien) en /home/student/cookies.txt. Los nuevos mensajes
deben adjuntarse al archivo /home/student/cookies.txt.
[student@servera ~]$ at -q b 16:05
warning: commands will be executed using /bin/sh
at> echo "The cookies are good" >> /home/student/cookies.txt
at> Ctrl+d
job 3 at Thu Mar 21 16:05:00 2019
Tenga en cuenta los números de trabajo de la salida anterior. Estos números de trabajo
pueden variar en su sistema.
2. Use el comando at para ver los números de trabajo del trabajo pendiente número 2.
[student@servera ~]$ at -c 2
...output omitted...
echo "It's teatime" >> /home/student/tea.txt
marcinDELIMITER28d54caa
Observe que el trabajo programado anterior ejecuta un comando echo que agrega el mensaje
It's teatime (Es la hora del té) a /home/student/tea.txt.
3. Use el comando at para ver los comandos del trabajo pendiente número 3.
[student@servera ~]$ at -c 3
...output omitted...
echo "The cookies are good" >> /home/student/cookies.txt
marcinDELIMITER1d2b47e9
Observe que el trabajo programado anterior ejecuta un comando echo que agrega el mensaje
The cookies are good (Las galletas están bien) a
/home/student/cookies.txt.
6. Use el comando atq para ver el número de trabajo de un trabajo que se ejecuta en
teatime(16:00) y quítelo usando el comando atrm.
[student@servera ~]$ atq
2 Thu Mar 21 16:00:00 2019 g student
3 Thu Mar 21 16:05:00 2019 b student
[student@servera ~]$ atrm 2
1. Use el comando atq para ver la lista de trabajos pendientes y confirmar que el trabajo
programado para ejecutarse en teatime (16:00) ya no existe.
[student@servera ~]$ atq
3 Thu Mar 21 16:05:00 2019 b student
Finalizar
En workstation, ejecute lab scheduling-at finish para terminar este ejercicio. Este script elimina
los archivos creados durante el ejercicio para garantizar que el entorno quede limpio.
[student@workstation ~]$ lab scheduling-at finish
Importante
Enviar un correo electrónico puede requerir la configuración adicional del servidor de
correo local o la retransmisión SMTP en un sistema.
Los campos en el archivo crontab aparecen en el siguiente orden:
Minutes (Minutos)
Hours (Horas)
Day of month (Día del mes)
Month (Mes)
Day of week (Día de la semana)
Command (Comando)
Importante
Cuando los campos Day of month (Día del mes) y Day of week (Día de la
semana) son ambos distintos de *, el comando se ejecuta cuando se cumple cualquiera
de estos dos campos. Por ejemplo, para ejecutar un comando el 15 de cada mes, y todos
los viernes a las 12:15, use el siguiente formato de trabajo:
15 12 15 * Fri command
x,y para listas. Las listas también pueden incluir rangos, por ejemplo, 5,10-13,17 en la
columna Minutes (Minutos) para indicar que un trabajo debe ejecutarse a los 5 minutos, a los
10 minutos, a los 11 minutos, a los 12 minutos, a los 13 minutos y a los 17 minutos de la hora.
*/x para indicar un intervalo de x, por ejemplo, */7 en la columna Minutes (Minutos)
ejecuta un trabajo exactamente cada siete minutos.
Asimismo, se pueden usar abreviaturas en inglés de tres letras para los meses y los días de la semana,
por ejemplo, Jan (enero), Feb (febrero) y Mon (lunes), Tue (martes).
El último campo contiene el comando que se ejecutará usando la shell predeterminada. La variable del
entorno SHELL se puede usar para cambiar la shell para el comando programado. Si el comando
contiene un símbolo de porcentaje no codificado (%), ese símbolo de porcentaje se tratará como el
carácter de una línea nueva, y todo lo que esté después del símbolo de porcentaje se enviará al
comando en stdin.
El siguiente trabajo envía un correo electrónico que contiene la palabra Chime al propietario de
este trabajo, cada cinco minutos entre las 9:00 a. m. y las 5:00 p. m., todos los viernes de julio.
*/5 9-16 * Jul 5 echo "Chime"
El rango de horas precedente 9-16 significa que el temporizador de trabajo comienza a la hora
novena (09:00) y continúa hasta el final de la decimosexta hora (16:59). El trabajo comienza a
ejecutarse a las 09:00 con la última ejecución a las 16:55 porque a cinco minutos de las
16:55 es 17:00 que está más allá del alcance de las horas dadas.
El siguiente trabajo ejecuta el comando mutt para enviar el mensaje de correo Checking in
al destinatario boss@example.com en cada día de trabajo (lunes a viernes), a las 9:00 a. m.
0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi there boss, just
checking in.
Referencias
Páginas del manual: crond(8), crontab(1), crontab(5)
Ejercicio guiado: Programación de trabajos de usuario
recurrentes
En este ejercicio, programará comandos para ejecutar en un programa de repetición como un usuario no
privilegiado, usando el comando crontab.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
Programar trabajos recurrentes para ejecutar como usuario no privilegiado
Inspeccionar los comandos que ejecuta un trabajo recurrente programado
Eliminar trabajos recurrentes programados
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab scheduling-cron start para comenzar el ejercicio. Este script asegura
que el entorno esté limpio y configurado correctamente.
[student@workstation ~]$ lab scheduling-cron start
2. Programar un trabajo recurrente como student que anexa la fecha y hora actual a
/home/student/my_first_cron_job.txt cada dos minutos entre 8:00 a. m. y
9:00 p. m. El trabajo solo debe ejecutarse de lunes a viernes, no los sábados ni los domingos.
Importante
Si está trabajando en este laboratorio fuera del día y la hora mencionados en la
instrucción anterior, debe ajustar la hora o la fecha del sistema en consecuencia
para que el trabajo se ejecute mientras está trabajando.
2.1.Use el comando crontab -e para abrir el crontab usando el editor de texto predeterminado.
[student@servera ~]$ crontab -e
2.3.Mientras esté en el editor de texto, presione Esc y escriba :wq para guardar los cambios y
salir del editor. Cuando el editor sale, debe ver la siguiente salida:
...output omitted...
crontab: installing new crontab
[student@servera ~]$
Observe que el trabajo programado anterior ejecuta el comando /usr/bin/date y agrega su salida
a /home/student/my_first_cron_job.txt.
4. Use el comando while para que su prompt de shell duerma hasta que se cree el archivo
/home/student/my_first_cron_job.txt como resultado de la ejecución exitosa del
trabajo recurrente que programó. Espere a que regrese su prompt de shell.
[student@servera ~]$ while ! test -f my_first_cron_job.txt; do sleep 1s; done
El comando anterior while usa ! test -f para continuar ejecutando un bucle de comandos sleep
1s hasta que se crea el archivo my_first_cron_job.txt en el directorio
/home/student.
6.1.Use el comando crontab -r para eliminar todos los trabajos recurrentes programados para
student.
[student@servera ~]$ crontab -r
6.2.Use el comando crontab -l para verificar que no existen trabajos recurrentes para
student.
[student@servera ~]$ crontab -l
no crontab for student
Los trabajos recurrentes del sistema se definen en dos ubicaciones: el archivo /etc/crontab y los
archivos dentro del directorio /etc/cron.d/. Siempre debe crear sus archivos crontab
personalizados bajo el directorio /etc/cron.d para programar trabajos recurrentes del sistema.
Coloque el archivo crontab personalizado en /etc/cron.d para evitar que se sobrescriba si se
produce alguna actualización del paquete al proveedor de /etc/crontab, que puede sobrescribir los
contenidos existentes en /etc/crontab. Los paquetes que requieren trabajos recurrentes del sistema
colocan sus archivos crontab en /etc/cron.d/ que contiene las entradas de trabajo. Los
administradores también usan esta ubicación para agrupar trabajos relacionados en un solo archivo.
El sistema crontab también incluye repositorios para scripts que necesitan ejecutarse cada hora, día,
semana y mes. Estos repositorios son directorios llamados /etc/cron.hourly/,
/etc/cron.daily/, /etc/cron.weekly/ y /etc/cron.monthly/. Una vez más, estos
directorios contienen scripts de shell ejecutables, no archivos crontab.
Importante
Recuerde hacer que todos los scripts que coloque en estos directorios sean ejecutables.
Si un script no es ejecutable, no se ejecutará. Para hacer un script ejecutable, use el
comando chmod +x script_name.
Nota
En el pasado, un servicio separado llamado anacron se usaba para manejar el archivo
/etc/anacrontab, pero en Red Hat Enterprise Linux 7 y posterior, el servicio
crond regular analiza este archivo.
Hay diferentes archivos en /var/spool/anacron/ para cada uno de los trabajos diarios,
semanales y mensuales para determinar si un trabajo en particular se ha ejecutado. Cuando crond
comienza un trabajo desde /etc/anacrontab, actualiza los sellos de hora de esos archivos. El
mismo sello de hora se usa para determinar cuándo se ejecutó un trabajo por última vez. La sintaxis de
/etc/anacrontab es diferente a la de los archivos de configuración de crontab regulares.
Contiene exactamente cuatro campos por línea, como se detalla a continuación.
Period in days (Período en días)
El intervalo en días para el trabajo que se ejecuta en una programación de repetición. Este
campo acepta un entero o una macro como su valor. Por ejemplo, la macro @daily es
equivalente al entero 1, lo que significa que el trabajo se ejecuta diariamente. De manera
similar, la macro @weekly es equivalente al entero 7, lo que significa que el trabajo se ejecuta
diariamente.
Delay in minutes (Demora en minutos)
Cantidad de tiempo que el daemon crond debe esperar antes de iniciar este trabajo.
[Timer]
OnCalendar=*:00/10
[Install]
WantedBy=sysstat.service
Después de recargar la configuración del administrador systemd, use el siguiente comando systemctl
para activar la unidad del temporizador.
[root@host ~]# systemctl enable --now <unitname>.timer
Referencias
Páginas del manual crontab(5),anacron(8),anacrontab(5), systemd.time(7),
systemd.timer(5) y crond(8)
Ejercicio guiado: Programación de trabajos del sistema
recurrentes
En este ejercicio, programará comandos para que se ejecuten en varios horarios agregando archivos de
configuración a los directorios crontab del sistema.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
Programar un trabajo del sistema recurrente para contar el número de usuarios activos
Actualizar la unidad de temporizador systemd que recopila los datos de actividad del sistema.
En workstation, ejecute lab scheduling-system start para comenzar el ejercicio. Este script
asegura que el entorno esté limpio y configurado correctamente.
[student@workstation ~]$ lab scheduling-system start
3. Programe un trabajo del sistema recurrente que genere un mensaje de registro que indique la
cantidad de usuarios activos actualmente en el sistema. El trabajo debe ejecutarse diariamente.
Puede usar el comando w -h | wc -l para recuperar el número de usuarios actualmente activos en
el sistema. También, use el comando logger para generar el mensaje de registro.
3.1.Cree un archivo de script llamado /etc/cron.daily/usercount con el siguiente
contenido. Puedes usar el comando vi /etc/cron.daily/usercount para crear el archivo de
script.
#!/bin/bash
USERCOUNT=$(w -h | wc -l)
logger "There are currently ${USERCOUNT} active users"
Complete!
4.2.Copie /usr/lib/systemd/system/sysstat-collect.timer en
/etc/systemd/system/sysstat-collect.timer.
[root@servera ~]# cp /usr/lib/systemd/system/sysstat-collect.timer \
/etc/systemd/system/sysstat-collect.timer
Importante
No debe editar archivos bajo el directorio /usr/lib/systemd. Con
systemd, puede copiar el archivo de la unidad al directorio
/etc/systemd/system y editar esa copia. El proceso de systemd
analiza su copia personalizada en lugar del archivo bajo el directorio
/usr/lib/systemd.
[Unit]
Description=Run system activity accounting tool every 2 minutes
[Timer]
OnCalendar=*:00/02
[Install]
WantedBy=sysstat.service
Los cambios anteriores causan que la unidad sysstat-collect. timer desencadene
la unidad de sysstat-collect.service cada dos minutos, que ejecuta
/usr/lib64/sa/sa1 1 1. La ejecución de /usr/lib64/sa/sa1 1 1 recopila los datos de actividad
del sistema en un archivo binario bajo el directorio /var/log/sa.
4.4.Use el comando systemctl daemon-reload para asegurarse de que systemd conozca los
cambios.
[root@servera ~]# systemctl daemon-reload
4.6.Use el comando while para esperar hasta que el archivo binario se cree bajo el directorio
/var/log/sa. Espere a que regrese su prompt de shell.
[root@servera ~]# while [ $(ls /var/log/sa | wc -l) -eq 0 ]; \
do sleep 1s; done
Finalizar
En workstation, ejecute lab scheduling-system finish para terminar este ejercicio. Este script
elimina los archivos creados durante el ejercicio para garantizar que el entorno quede limpio.
[student@workstation ~]$ lab scheduling-system finish
Administración de archivos temporales
Objetivos
Después de finalizar esta sesión, debe ser capaz de habilitar y deshabilitar los temporizadores de
systemd y configurar un temporizador que administre archivos temporales.
[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Después de recargar la configuración del administrador systemd, use el siguiente comando systemctl
para activar la unidad systemd-tmpfiles-clean.timer.
[root@host ~]# systemctl enable --now systemd-tmpfiles-clean.timer
Cree el directorio /home/student si aún no existe. Si existe, vacíe todos los contenidos. Cuando
systemd-tmpfiles --clean se ejecute, elimine todos los archivos a los que no se haya accedido, ni se
hayan modificado ni cambiado en más de un día.
L /run/fstablink - root root - /etc/fstab
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles.d/*.conf
Los archivos en /usr/lib/tmpfiles.d/ son proporcionados por los paquetes de RPM relevantes,
y no debe editarlos. Los archivos bajo /run/tmpfiles.d/ son archivos volátiles, normalmente
usados por daemons para administrar sus propios archivos temporales de tiempo de ejecución. Los
archivos bajo /etc/tmpfiles.d/ están pensados para que los administradores configuren
ubicaciones temporales personalizadas y anulen los valores predeterminados provistos por el
proveedor.
Si un archivo en /run/tmpfiles.d/ tiene el mismo nombre de archivo que un archivo en
/usr/lib/tmpfiles.d/, se usa el archivo en /run/tmpfiles.d/. Si un archivo en
/etc/tmpfiles.d/ tiene el mismo nombre de archivo que un archivo en /run/tmpfiles.d/ o
/usr/lib/tmpfiles.d/, se usa el archivo en /etc/tmpfiles.d/.
Dadas estas reglas de precedencia, puede reemplazar fácilmente la configuración proporcionada por el
proveedor si copia el archivo relevante en /etc/tmpfiles.d/ y, luego, lo edita. Trabajar de esta
manera garantiza que la configuración proporcionada por el administrador se puede administrar
fácilmente desde un sistema de administración de configuración central, y que no se sobrescriba por
una actualización de un paquete.
Nota
Cuando evalúe configuraciones nuevas o modificadas, puede ser útil solo aplicar los
comandos de un archivo de configuración. Esto se puede lograr si se especifica el
nombre del archivo de configuración en la línea de comandos.
Referencias
Páginas del manual: systemd-tmpfiles(8), tmpfiles.d(5), stat(1), stat(2) y systemd.timer(5).
Ejercicio guiado: Administración de archivos temporales
En este ejercicio, configurará systemd-tmpfiles para cambiar la rapidez con la que elimina los
archivos temporales de /tmp, y también para purgar periódicamente los archivos de otro directorio.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
Configurar systemd-tmpfiles para eliminar archivos temporales no usados de /tmp.
Debido a que el comando anterior no devolvió ningún error, confirma que los ajustes de
configuración son correctos.
3. Agregue una nueva configuración que asegure que el directorio /run/momentary exista con
la propiedad del usuario y del grupo establecida en root. Los permisos octales para el
directorio deben ser 0700. La configuración debe purgar los archivos de este directorio que no
se hayan usado en los últimos 30 segundos.
3.1.Cree el archivo llamado /etc/tmpfiles.d/momentary.conf con el siguiente
contenido. Puede usar el comando vim /etc/tmpfiles.d/momentary.conf para
crear el archivo de configuración.
d /run/momentary 0700 root root 30s
Debido a que el comando anterior no devolvió ningún error, confirma que los ajustes de
configuración son correctos.
3.3.Use el comando ls para verificar que el directorio /run/momentary se crea con los
permisos, el propietario y el propietario del grupo adecuados.
[root@servera ~]# ls -ld /run/momentary
drwx------. 2 root root 40 Mar 21 16:39 /run/momentary
Tenga en cuenta que el conjunto de permisos octales de /run/momentary es 0700 y que
la propiedad del usuario y del grupo se establece en root.
4. Verifique que cualquier archivo bajo el directorio /run/momentary, no usado en los últimos
30 segundos, se elimina, en función de la configuración de systemd-tmpfiles para el
directorio.
4.1.Use el comando touch para crear un archivo denominado
/run/momentary/testfile.
[root@servera ~]# touch /run/momentary/testfile
4.2.Use el comando sleep para configurar su prompt de shell para que no regrese durante 30
segundos.
[root@servera ~]# sleep 30
Finalizar
En workstation, ejecute lab scheduling-tempfiles finish para terminar este ejercicio.
Este script elimina los archivos creados durante el ejercicio para garantizar que el entorno quede
limpio.
[student@workstation ~]$ lab scheduling-tempfiles finish
Resumen
En este capítulo, aprendió lo siguiente:
Los trabajos que están programados para ejecutarse una vez en el futuro se llaman trabajos o
tareas diferidos.
Los trabajos de usuario recurrentes ejecutan las tareas del usuario en una programación de
repetición.
Los trabajos recurrentes del sistema realizan tareas administrativas en una programación de
repetición que tiene impacto en todo el sistema.
Las unidades de tipo temporizador de systemd pueden ejecutar tanto los trabajos diferidos
como los recurrentes.