Búsqueda de sitios web

Cómo ejecutar o repetir un comando de Linux cada X segundos para siempre


Un administrador del sistema a menudo necesita ejecutar un comando repetidamente en determinados períodos de tiempo. A menudo, estas tareas se pueden completar fácilmente con simples comandos cron. En la mayoría de los casos, esto debería funcionar, pero el período más corto en el que puede ejecutar el comando cron es cada 1 minuto. Lo creas o no, en muchos casos esto es demasiado lento.

En este tutorial, aprenderá técnicas de secuencias de comandos simples para monitorear o vigilar un comando particular en estado de ejecución continua similar al comando superior (monitorear continuamente el proceso y la utilización de la memoria) cada 3 segundos de forma predeterminada.

No nos detendremos en discutir las razones por las que necesitarías ejecutar comandos con tanta frecuencia. Creo que cada uno tiene diferentes motivos para ello en su trabajo diario o incluso en sus PC y portátiles domésticos.

1. Utilice el comando de vigilancia

Watch es un comando de Linux que le permite ejecutar un comando o programa periódicamente y también muestra el resultado en la pantalla. Esto significa que podrá ver el resultado del programa a tiempo. De forma predeterminada, el reloj vuelve a ejecutar el comando/programa cada 2 segundos. El intervalo se puede cambiar fácilmente para satisfacer sus necesidades.

Monitorear el uso de la memoria

"Watch" es extremadamente fácil de usar; para probarlo, puede iniciar una terminal Linux de inmediato y escribir el siguiente comando:

watch free -m

El comando anterior verificará la memoria libre de su sistema y actualizará los resultados del comando libre cada dos segundos.

Como se ve en el resultado anterior, tiene un encabezado que muestra información sobre (de izquierda a derecha) el intervalo de actualización, el comando que se está ejecutando y la hora actual. Si desea ocultar este encabezado, puede utilizar la opción -t.

La siguiente pregunta lógica es: cómo cambiar el intervalo de ejecución. Para ello, puedes utilizar la opción -n, que especifica el intervalo con el que se ejecutará el comando. Este intervalo se especifica en segundos. Entonces digamos que deseas ejecutar tu archivo script.sh cada 10 segundos, puedes hacerlo así:

watch -n 10 script.sh

Tenga en cuenta que si ejecuta el comando como se muestra arriba, necesitará cd al directorio (aprenda 15 ejemplos de comandos cd) donde se encuentra el script o especifique la ruta completa a ese script.

Otras opciones útiles del comando de vigilancia son:

  1. -b: crea un pitido si la salida del comando es distinta de cero.
  2. -c: interpreta secuencias de colores ANSI.
  3. -d: resalta los cambios en la salida del comando.

Supervise los usuarios conectados, el tiempo de actividad y el promedio de carga

Supongamos que desea monitorear los usuarios que iniciaron sesión, el tiempo de actividad del servidor y cargar la salida promedio en fase continua cada pocos segundos, luego use el siguiente comando como se muestra:

watch uptime

Para salir del comando, presione CTRL+C.

Aquí, el comando 'uptime' se ejecutará y mostrará los resultados actualizados cada 2 segundos de forma predeterminada.

Supervisar el progreso del comando de copia

En Linux, al copiar archivos de una ubicación a otra usando el comando cp, el progreso de los datos no se muestra; para ver el progreso de los datos que se copian, puede usar el comando watch comando junto con el comando du -s para verificar el uso del disco en tiempo real.

cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso 

Si cree que el proceso anterior es demasiado complicado de realizar, le sugiero que utilice el comando Copia avanzada, que muestra el progreso de los datos durante la copia.

2. Utilice el comando de suspensión

La suspensión se utiliza a menudo para depurar scripts de shell, pero también tiene muchos otros propósitos útiles. Por ejemplo, cuando se combina con los bucles for o while, puedes obtener resultados impresionantes.

Si es nuevo en las secuencias de comandos bash, puede consultar nuestra guía sobre bucles bash aquí.

En caso de que es la primera vez que escuchas sobre el comando "sleep", se utiliza para retrasar algo durante un período de tiempo específico. En los scripts, puede usarlo para indicarle a su script que ejecute el comando 1, espere 10 segundos y luego ejecute el comando 2.

Con los bucles anteriores, puede indicarle a bash que ejecute un comando, que duerma durante N cantidad de segundos y luego ejecute el comando nuevamente.

A continuación puedes ver ejemplos de ambos bucles:

para ejemplo de bucle

for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done

La línea anterior ejecutará el comando echo y mostrará la fecha actual, un total de 10 veces, con 5 segundos de suspensión entre ejecuciones.

Aquí hay un resultado de muestra:

This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016
This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016
This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016
This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016
This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016
This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016
This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016
This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016
This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016
This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016

Puede cambiar los comandos echo y date con sus propios comandos o secuencias de comandos y cambiar el intervalo de suspensión según sus necesidades.

Ejemplo de bucle while

while true; do echo -n "This is a test of while loop";date ; sleep 5; done

Aquí hay un resultado de muestra:

This is a test of while loopWed Feb 17 20:52:32 EET 2016
This is a test of while loopWed Feb 17 20:52:37 EET 2016
This is a test of while loopWed Feb 17 20:52:42 EET 2016
This is a test of while loopWed Feb 17 20:52:47 EET 2016
This is a test of while loopWed Feb 17 20:52:52 EET 2016
This is a test of while loopWed Feb 17 20:52:57 EET 2016

El comando anterior se ejecutará hasta que el usuario lo elimine o lo interrumpa. Puede resultar útil si necesita ejecutar un comando que se ejecuta en segundo plano y no quiere contar con cron.

Importante: Al utilizar los métodos anteriores, se recomienda encarecidamente que establezca un intervalo lo suficientemente largo como para que el comando tenga tiempo suficiente para terminar de ejecutarse, antes de la siguiente ejecución.

Conclusión

Los ejemplos de este tutorial son útiles, pero no pretenden reemplazar completamente la utilidad cron. Depende de usted encontrar cuál funciona mejor para usted, pero si tenemos que separar el uso de ambas técnicas, yo diría esto:

  1. Utilice cron cuando necesite ejecutar comandos periódicamente, incluso después de reiniciar el sistema.
  2. Utilice los métodos explicados en este tutorial para programas/scripts que deben ejecutarse dentro de la sesión de usuario actual.

Como siempre, si tiene alguna pregunta o comentario, no dude en enviarlo en la sección de comentarios a continuación.