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 ciertos 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 crea o no, en muchos casos esto es demasiado lento.

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

No nos detendremos a discutir las razones por las que necesitaría ejecutar comandos con tanta frecuencia. Creo que todo el mundo tiene distintas razones para ello en sus trabajos diarios o incluso en las PC y portátiles de casa.

1. Utilice el comando watch

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

"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 el intervalo de actualización (de izquierda a derecha), el comando que se está ejecutando y la hora actual. Si desea ocultar este encabezado, puede usar la opción -t .

La siguiente pregunta lógica es cómo cambiar el intervalo de ejecución. Para ello, puede 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 desea ejecutar su archivo script.sh cada 10 segundos, puede hacerlo así:

# watch -n 10 script.sh

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

Otras opciones útiles del comando watch son:

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

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.

En Linux, mientras copia 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 código 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 lograr, le sugiero que elija el comando Copia avanzada, que muestra el progreso de los datos durante la copia.

2. Utilice el comando de reposo

El sueño se usa a menudo para depurar scripts de shell, pero también tiene muchos otros propósitos útiles. Por ejemplo, cuando se combina con for o while bucles, puede obtener resultados asombrosos.

Si es nuevo en la creación de scripts de bash, puede consultar nuestra guía sobre bucles de bash aquí.

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

Con los bucles anteriores, puede decirle a bash que ejecute un comando, que duerma durante N segundos y luego vuelva a ejecutar el comando.

A continuación puede ver ejemplos de ambos bucles:

# 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 una salida 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 script y cambiar el intervalo de suspensión según sus necesidades.

# 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 ser ú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 termine de ejecutarse antes de la siguiente ejecución.

Conclusión

Los ejemplos de este tutorial son útiles, pero no están destinados a 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, diría esto:

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

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