Cómo usar at y batch en Linux para programar comandos

Contenidos

Una ventana de terminal en un sistema Linux.

Si desea programar un trabajo de Linux que ocurrirá solo una vez, cron es exagerado. los at familia de comandos es lo que necesitas! Y si desea ejecutar procesos solo cuando su sistema tenga recursos libres, puede utilizar batch.

Cómo programar trabajos de Linux

los cron demonio mantiene una lista de trabajos que ejecuta en momentos específicos. Estas tareas y programas se ejecutan en segundo plano a la hora programada. Esto le ofrece una gran flexibilidad para programar tareas que deben repetirse. Ya sea que necesite ejecutar una tarea una vez cada hora, a una hora específica cada día, o al menos una vez al mes o al año, puede configurarla en cron.

A pesar de esto, esto no ayuda si desea programar una tarea para que se ejecute solo una vez. Claro, puedes configurarlo en cron, pero después debe recordar regresar y quitar el entrada crontab después de que se ejecuta la tarea, lo cual es inconveniente.

Con Linux, si está luchando con un obstáculo, es casi una garantía de que alguien más además ha luchado con él. Por suerte, debido a que los sistemas operativos similares a Unix han existido durante tanto tiempo, además existe una magnífica oportunidad de que alguien haya creado una solución a su problema.

Para el problema descrito previamente, lo han hecho y se llama at.

RELACIONADO: Cómo programar tareas en Linux: Introducción a los archivos Crontab

Instalación del comando at

Tuvimos que instalar at en Ubuntu 18.04 y Manjaro 18.1.0 (ya estaba instalado en Fedora 31).

Instalar at en Ubuntu, use este comando:

sudo apt-get install at

Una vez completada la instalación, puede iniciar el at demonio con este comando:

sudo systemctl enable --now atd.service

En Manjaro, instalas at con este comando:

sudo pacman -Sy at

Una vez completada la instalación, escriba este comando para iniciar el at demonio:

sudo systemctl enable --now atd.service

En cualquier distribución, puede escribir este comando para asegurarse de que atd el demonio se está ejecutando:

ps -e | grep atd

Cómo usar el comando at de forma interactiva

Utilizar at, debes de asignarle una fecha y hora para que se ejecute. Existe una gran flexibilidad en la forma en que puede escribirlos, que cubriremos más adelante en este post.

A pesar de esto, aún cuando vamos a usar at de forma interactiva, debe proporcionar la fecha y la hora por adelantado. Si no incluye nada en la línea de comando o escribe algo que no es una fecha y hora, at responde con «Tiempo ilegible», como se muestra a continuación:

at
at banana

Las fechas y horas pueden ser explícitas o relativas. A modo de ejemplo, digamos que desea que un comando se ejecute dentro de un minuto. at sabe lo que significa «ahora», por lo que puede utilizar now y agrégale un minuto, así:

at now + 1 minute

at imprime un mensaje y un at y espera a que escriba los comandos que desea programar. Primero, a pesar de esto, considere el mensaje, como se muestra a continuación:

Te dice at lanza una instancia del sh concha y voluntad ejecutar los comandos dentro de eso. Sus comandos no se ejecutarán en el shell Bash, que es compatible con el sh shell pero tiene un conjunto de funciones más rico.

Si sus comandos o scripts intentan utilizar una función o facilidad que proporciona Bash, pero sh no lo hace, fallarán.

Es fácil probar si sus comandos o scripts se ejecutarán en sh. Usar el sh comando para iniciar un sh cascarón:

sh

El símbolo del sistema cambia a un signo de dólar ($), y ahora puede ejecutar sus comandos y verificar que funcionen correctamente.

Para volver al shell Bash, escriba el exit mando:

exit

No verá ningún mensaje de error o salida estándar de los comandos. Esto se debe a que sh shell se inicia como una tarea en segundo plano y se ejecuta sin ningún tipo de interfaz de pantalla.

Cualquier resultado de los comandos, bueno o malo, se le envía por email. Se envía a través del sistema de correo interno a quien ejecuta el at mando. Esto significa que debe instalar y configurar ese sistema de email interno.

Muchos (la mayoría) de los sistemas Linux no disponen un sistema de email interno, dado que rara vez se necesita uno. Aquellos que usan típicamente un sistema como enviar correo o sufijo. Si su sistema no tiene un sistema de email interno, puede hacer que las secuencias de comandos se escriban en los archivos o redirigir la salida a los archivos para agregar registros.

Si el comando no genera ningún mensaje de error o salida estándar, no recibirá un email de todos modos. Muchos comandos de Linux indican el éxito a través del silencio, por lo que en la mayoría de los casos, no recibirá un email.

RELACIONADO: ¿Qué son stdin, stdout y stderr en Linux?

Ahora es el momento de escribir un comando en at. Para este ejemplo, usaremos un pequeño archivo de script llamado sweep.sh que borra el *.bak, *.tmp, y *.o archivos. Escriba la ruta al comando, como se muestra a continuación, y después presione Entrar.

Aparece otro símbolo del sistema y puede agregar tantos comandos como desee. Por lo general, es más conveniente tener sus comandos en un solo script y simplemente llamar a ese script desde dentro at.

Presione Ctrl + D para decir at ha terminado de agregar comandos. at muestra , lo que significa fin de transmisión. Se le indica el número de trabajo y cuándo está programado para ejecutarse, como se muestra a continuación:

Después de que se ejecute el trabajo, escriba lo siguiente para verificar su correo interno:

mail

Si no hay correo, debe hacerse cargo el éxito. De todos modos, en esta circunstancia, puede verificar y ver si el *.bak , *.tmp, y *.o Los archivos se eliminaron para confirmar que el comando funcionó.

Escriba lo siguiente para ejecutar todo de nuevo:

at now + 1 minute

Después de un minuto, escriba lo siguiente para volver a revisar su correo:

mail

¡Oye, tenemos correo! Para leer el mensaje número uno, presione 1 y después presione Enter.

Recibimos un email de at debido a que los comandos en la secuencia de comandos generaron mensajes de error. En este ejemplo, no había archivos para quitar debido a que cuando ejecutamos el script previamente, los eliminó.

Presione D + Enter para quitar el email y Q + Enter para salir del programa de correo.

Formatos de fecha y hora

Tiene mucha flexibilidad en lo que respecta a los formatos de hora que puede usar con at. Aquí están algunos ejemplos:

  • Ejecutar a las 11:00 am:
  • Ejecutar mañana a las 11:00 am:
  • Ejecutar a las 11:00 a. M. De este día la semana que viene:
  • Ejecutar a esta hora, en este día, la próxima semana:
  • Corre a las 11:00 am el próximo viernes:
  • Ejecutar a esta hora el próximo viernes:
  • Ejecutar a las 11:00 am en esta fecha, el próximo mes:
  • Ejecutar a las 11:00 am en una fecha específica:
  • Ejecutar dentro de 30 minutos:
  • Ejecutar dentro de dos horas:
  • Ejecutar mañana a esta hora:
  • Ejecutar a esta hora el jueves:
  • Ejecutar a las 12:00 am:
  • Ejecutar a las 12:00 pm:
  • Si eres británico, inclusive puedes programar un comando para que se ejecute a la hora del té (4 p. M.):

Mirando la cola de trabajos

Puede escribir el atq comando para ver la cola de trabajos programados, como se muestra a continuación.

Para cada comando en la cola, atq muestra la próxima información:

  • Identificación del trabajo
  • Cita agendada
  • Hora programada
  • Cola en la que está el trabajo. Las colas están etiquetadas como «a», «b», etc. Tareas normales con las que programa at entrar en la cola «a», mientras que las tareas que programa con batch (que se tratan más adelante en este post) entran en la cola «b».
  • La persona que programó el trabajo.

Usando at en la línea de comando

No debes de utilizar at interactivamente; además puede usarlo en el comando. Esto facilita el uso de scripts internos.

Puede canalizar comandos a at, como esto:

echo "sh ~/sweep.sh" | at 08:45 AM

El trabajo es aceptado y programado por at, y el número de trabajo y la fecha de ejecución se informan como antes.

RELACIONADO: Cómo utilizar Pipes en Linux

Utilizar at con archivos de comandos

Además puede almacenar una secuencia de comandos en un archivo y después pasarla a at. Puede ser un archivo de comandos de texto sin formato, no tiene que ser un script ejecutable.

Puedes utilizar el -f (archivo) de la próxima manera para pasar un nombre de archivo a at:

at now + 5 minutes -f clean.txt

Puede lograr el mismo resultado si redirige el archivo a at:

at now + 5 minutes < clean.txt

Eliminación de trabajos programados de la cola

Para quitar un trabajo programado de la cola, puede usar el atrm mando. Si desea ver la cola primero para hallar el número del trabajo que desea quitar, puede utilizar atq . Posteriormente, use ese número de trabajo con atrm, Como se muestra abajo:

atq
atrm 11
atq

Cómo ver una vista detallada de los trabajos

Como ya mencionamos previamente, puede programar trabajos en el futuro. A veces, es factible que olvide lo que va a hacer un trabajo. los atq El comando muestra los trabajos en la cola, pero no lo que van a hacer. Si desea ver una vista detallada de un trabajo, puede usar el -c (gato) opción.

Primero, usaremos atq para hallar el número de trabajo:

atq

Ahora, usaremos el trabajo número 13 con el -c opción:

at -c 13

Aquí hay un desglose de la información que obtenemos sobre el trabajo:

  • Primera linea: Esto nos dice que los comandos se ejecutarán bajo el sh cascarón.
  • Segunda linea: Vemos que los comandos se ejecutarán con un ID de usuario y de grupo de 1000. Estos son los valores para la persona que ejecutó el at mando.
  • Tercera línea: La persona que recibe los correos electrónicos. atenvía.
  • Cuarta línea: los Máscara de usuario es 22. Esta es la máscara que se utiliza para determinar los permisos predeterminados para cualquier archivo creado en este sh sesión. La máscara se resta de 666, lo que nos da 644 (el idéntico octal de rw-r--r--).
  • Datos restantes: La mayoría son variables de entorno.

  • Resultados de una prueba. Una prueba verifica para asegurarse de que se pueda entrar al directorio de ejecución. Si no puede, se genera un error y se abandona la ejecución del trabajo.
  • Los comandos a ejecutar. Estos se enumeran y se muestra el contenido de los scripts que están programados. Tenga en cuenta que aún cuando el script en nuestro ejemplo anterior se escribió para ejecutarse en Bash, aún se ejecutará en un sh cascarón.

El comando por lotes

los batch mando opera de manera similar al at comando, pero con tres diferencias significativas:

  1. Solo puedes utilizar el batch comando de forma interactiva.
  2. En lugar de programar trabajos para que se ejecuten en un momento específico, los agrega a la cola y el batch El comando los ejecuta cuando la carga media del sistema es inferior a 1,5.
  3. Debido a lo anterior, nunca especifica una fecha y hora con el batch mando.

Cuando utiliza el batch comando, lo llama por su nombre sin parámetros de línea de comando como este:

batch

A continuación, agregue tareas tal como lo haría con el at mando.

Controlar el acceso al comando at

los at.allow y at.deny los archivos controlan quién puede utilizar el at familia de comandos. Estos se encuentran dentro del /etc directorio. Por defecto, solo el at.deny archivo existe y se crea cuando at esta instalado.

Así es como funcionan estos:

  • at.deny: Enumera las aplicaciones y entidades que no pueden utilizar at para programar trabajos.
  • at.allow: Listas que pueden utilizar at para programar trabajos. Si el at.allow el archivo no existe, at solo utiliza el at.deny expediente.

De forma predeterminada, cualquiera puede utilizar at. Si desea restringir quién puede usarlo, use el at.allow archivo para enumerar los que pueden. Esto es más fácil que agregar a todos los que no pueden utilizar at al at.deny expediente.

Esto es lo que at.deny el archivo se parece a:

sudo less /etc/at.deny

El archivo enumera los componentes del sistema operativo que no pueden utilizar at. Muchos de estos no pueden hacerlo por razones de seguridad, por lo que no desea quitar ninguno del archivo.

Ahora, editaremos el at.allow expediente. Vamos a agregar dave y mary, pero nadie más podrá utilizar at.

Primero, escribimos lo siguiente:

sudo gedit /etc/at.allow

En el editor, agregamos los dos nombres, como se muestra a continuación, y después guardamos el archivo.

"Dave" y "Mary" se agregaron a gedit.

Si alguien más intenta utilizar at, le dirán que no tiene permiso. A modo de ejemplo, digamos que un usuario llamado eric escribe lo siguiente:

at

Sería rechazado, como se muestra a continuación.

De nuevo, eric no está en el at.deny expediente. Tan pronto como pongas a alguien en el at.allow archivo, a todos los demás se les niega el permiso para utilizar at.

Genial para ocasiones excepcionales

Como puede ver, ambos at y batch son ideales para tareas que solo necesita ejecutar una vez. Nuevamente, como una revisión rápida:

  • Cuando necesite hacer algo que no sea un procedimiento regular, prográmelo con at.
  • Si desea ejecutar una tarea solo cuando la carga del sistema es lo suficientemente baja, utilice batch.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.