Linux Professional Institute
          Learning Logo.
Pasar al contenido principal
  • Inicio
    • Todos los recursos
    • LPI Learning Materials
    • Conviértete en colaborador
    • Publishing Partners
    • Conviértase en un Publishing Partner
    • Acerca de nosotros
    • FAQ
    • Colaboradores
    • Contáctenos
  • LPI.org
107.2 Lección 2

Tema 105: Shells y scripts
105.1 Customize and use the shell environment
  • 105.1 Lección 1
  • 105.1 Lección 2
  • 105.1 Lección 3
105.2 Personalización y escritura de scripts sencillos
  • 105.2 Lección 1
  • 105.2 Lección 2
Tema 106: Interfaces de usuario y escritorios
106.1 Instalar y configurar X11
  • 106.1 Lección 1
106.2 Escritorios gráficos
  • 106.2 Lección 1
106.3 Accesibilidad
  • 106.3 Lección 1
Tema 107: Tareas administrativas
107.1 Administrar cuentas de usuario y de grupo y los archivos de sistema relacionados con ellas
  • 107.1 Lección 1
  • 107.1 Lección 2
107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos
  • 107.2 Lección 1
  • 107.2 Lección 2
107.3 Localización e internacionalización
  • 107.3 Lección 1
Tema 108: Servicios esenciales del sistema
108.1 Mantener la hora del sistema
  • 108.1 Lección 1
  • 108.1 Lección 2
108.2 Registros del sistema
  • 108.2 Lección 1
  • 108.2 Lección 2
108.3 Conceptos básicos del Agente de Transferencia de Correo
  • 108.3 Lección 1
108.4 Gestión de la impresión y de las impresoras
  • 108.4 Lección 1
Tema 109: Fundamentos de redes
109.1 Fundamentos de los protocolos de Internet
  • Muy pronto...
109.2 Configuración de red persistente
  • Muy pronto...
109.3 Resolución de problemas básicos de red
  • Muy pronto...
109.4 Configuración DNS en el lado del cliente
  • Muy pronto...
Tema 110: Seguridad
110.1 Tareas de administración de seguridad
  • Muy pronto...
110.2 Configuración de la seguridad del sistema
  • Muy pronto...
110.3 Protección de datos mediante cifrado
  • Muy pronto...
  1. Tema 107: Tareas administrativas
  2. 107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos
  3. 107.2 Lección 2

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 batch es similar a at, sin embargo las tareas batch se ejecutan sólo cuando la carga del sistema es lo suficientemente baja como para permitirlo.

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 a z y de A a Z (por defecto a para at y b para batch). 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 tareas batch.

-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 atq como root, mostrará las tareas en cola para todos los usuarios.

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 atrm como root puede borrar los trabajos de todos los usuarios.

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 journalalctl. Recuerde también que si está actuando como un usuario ordinario, necesita usar la opción --user de los comandos systemd-run y journalctl.

Ejercicios guiados

  1. 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


  2. Una vez que ha programado una tarea con at, ¿cómo puede revisar sus comandos?


  3. ¿Qué comandos puede usar para revisar tu trabajos pendientes? ¿Qué comandos usaría para borrarlos?


  4. Con systemd, ¿qué comando se utiliza como alternativa a at?


Ejercicios de exploración

  1. 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.


  2. Entre en el sistema como otro usuario ordinario y cree otra tarea con at que ejecute el script bar.sh mañana a las 10:00 am. Supongamos que el script se encuentra en el directorio principal del usuario.


  3. Entra en el sistema como otro usuario ordinario y crea otra tarea con at que ejecute el script foobar.sh justo después de 30 minutos. Supongamos que el script se encuentra en el directorio principal del usuario.


  4. Ahora como root, ejecute el comando atq para revisar los trabajos at programados de todos los usuarios. ¿Qué pasa si un usuario ordinario ejecuta este comando?


  5. Como root, borre todos estos trabajos pendientes en at usando un solo comando.


  6. 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 a at.

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 de at para la programación de una única vez.

Respuestas a los ejercicios guiados

  1. 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

  2. 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.

  3. ¿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 comando at -d para borrarlos. at -l es un alias para atq y at -d es un alias para atrm. Recuerde que root puede listar y borrar las tareas de todos los usuarios.

  4. Con systemd, ¿qué comando se utiliza como alternativa a at?

    El comando systemd-run puede ser usado como una alternativa a at 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

  1. 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
  2. Entre en el sistema como otro usuario ordinario y cree otra tarea con at que ejecute el script bar.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
  3. Entre en el sistema como otro usuario ordinario y cree otra tarea con at que ejecute el script bar.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
  4. Ahora como root, ejecute el comando atq para revisar los trabajos at 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 de at pendientes de todos los usuarios aparecen en la lista. Si lo ejecuta como un usuario ordinario, sólo sus propios trabajos pendientes at serán listados.

  5. Como root, borre todos estos trabajos pendientes en at usando un solo comando.

    # atrm 50 51 52
  6. 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 caracter s en lugar de la marca ejecutable para el propietario) y SGID (el caracter s 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 con at.

© 2020 Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://asir.sudo.es/docnux/learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

Siguiente lección

107.3 Localización e internacionalización (107.3 Lección 1)

Leer la próxima lección

© 2020 Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://asir.sudo.es/docnux/learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

LPI es una organización sin fines de lucro.

Linux Professional Institute (LPI) es la organización global de certificación y apoyo académico para profesionales de código abierto. Con más de 200,000 titulares de certificación, es el primer y más grande organismo de certificación no comercial del mundo para Linux y Open Source. LPI cuenta con profesionales certificados en más de 180 países, realiza exámenes en varios idiomas y tiene cientos de socios de capacitación.

Nuestro propósito es hacer que las oportunidades económicas y creativas estén disponibles para todos, haciendo que el conocimiento de código abierto y la certificación sea universalmente accesible.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contáctenos
  • Política de privacidad y cookies

¿Detecta un error o desea ayudar a mejorar esta página? Por favor háznoslo saber.

© Copyright 1999-2020 The Linux Professional Institute Inc. Todos los derechos reservados.