A system administrator often needs to run a command repeatedly in a certain periods of time. Often such tasks can be easily completed with simple cron commands. In most of the cases this should work, but the shortest period which you can run cron command is every 1 minute. Believe it or not, in many cases this is too slow.

En este tutorial, aprenderás técnicas de scripting simples para monitorear o mantener un ojo en un comando particular en estado de ejecución continua, similar al comando top (monitorear continuamente el proceso y la utilización de memoria) cada 3 segundos por defecto.
No nos detendremos a discutir las razones por las que necesitarías ejecutar comandos tan seguido. Creo que cada persona tiene diferentes motivos para hacerlo en su trabajo diario o incluso en sus computadoras y laptops personales.
1. Utilizar el Comando watch
Watch es un comando de Linux que te permite ejecutar un comando o programa periódicamente y también te muestra la salida en la pantalla. Esto significa que podrás ver la salida del programa a tiempo. Por defecto, watch vuelve a ejecutar el comando/programa cada 2 segundos. El intervalo se puede cambiar fácilmente para satisfacer tus necesidades.
Monitorear el Uso de Memoria
“Watch” es extremadamente fácil de usar, para probarlo, puedes abrir una terminal de Linux de inmediato y escribir el siguiente comando:
# watch free -m
El comando anterior verificará la memoria libre de tu sistema y actualizará los resultados del comando free cada dos segundos.

Como se ve en la salida anterior, tienes 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 deseas ocultar este encabezado, puedes usar la opción -t
.
La siguiente pregunta lógica es cómo cambiar el intervalo de ejecución. Para ese propósito, puedes usar la opción -n
, que especifica el intervalo con el que se ejecutará el comando. Este intervalo se especifica en segundos. Entonces, digamos que quieres ejecutar tu archivo script.sh
cada 10 segundos, puedes hacerlo así:
# watch -n 10 script.sh
Nota que si ejecutas el comando como se muestra arriba, necesitarás cd
al directorio (aprende Aprender 15 ejemplos de comando cd) donde está ubicado el script o especificar de otra manera la ruta completa de ese script.
Otras opciones útiles del comando watch son:
-b
– crea un sonido de pitido si la salida del comando es distinta de cero.-c
– Interpreta secuencias de color ANSI.-d
– resalta los cambios en la salida del comando.
Monitorizar usuarios conectados, tiempo de actividad y carga promedio
Supongamos que deseas monitorear usuarios conectados, tiempo de actividad del servidor y salida de carga promedio en fase continua cada pocos segundos, entonces utiliza el siguiente comando como se muestra:
# watch uptime

Para salir del comando, presiona CTRL+C
.
Aquí, el comando 'uptime'
se ejecutará y mostrará los resultados actualizados cada 2 segundos por defecto.
Monitorizar el progreso del comando de copia
En Linux, al copiar archivos de una ubicación a otra usando el comando cp
, no se muestra el progreso de los datos. Para ver el progreso de los datos que se están copiando, puedes usar el comando watch
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 consideras que el proceso anterior es demasiado complicado de lograr, te sugiero que optes por el comando de copia avanzado, que muestra el progreso de los datos mientras se copian.
2. Usa el comando sleep
Sleep se usa a menudo para depurar scripts de shell, pero también tiene muchos otros propósitos útiles. Por ejemplo, al combinarlo con los bucles for
o while
, puedes obtener resultados bastante impresionantes.
Si eres nuevo en la creación de scripts bash, puedes consultar nuestra guía sobre bucles bash aquí.
En caso de que sea la primera vez que escuchas sobre el comando "sleep"
, se utiliza para retrasar algo durante un tiempo especificado. En scripts, puedes usarlo para indicarle a tu script que ejecute el comando 1, espere 10 segundos y luego ejecute el comando 2.
Con los bucles anteriores, puedes indicarle a bash que ejecute un comando, espere N cantidad de segundos y luego ejecute el comando nuevamente.
A continuación, puedes ver ejemplos de ambos bucles:
Ejemplo de bucle for
# 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 un intervalo de 5 segundos entre ejecuciones.
Aquí tienes una salida de ejemplo:
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
Puedes cambiar los comandos echo y date con tus propios comandos o script y cambiar el intervalo de espera según tus necesidades.
Ejemplo de bucle while
# while true; do echo -n "This is a test of while loop";date ; sleep 5; done
Aquí tienes una salida de ejemplo:
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 sea detenido o interrumpido por el usuario. Puede ser útil si necesitas ejecutar un comando en segundo plano y no quieres depender de cron.
Importante: Al utilizar los métodos anteriores, se recomienda encarecidamente que establezcas un intervalo lo suficientemente largo para dar tiempo suficiente a tu comando para finalizar su ejecución antes de la siguiente ejecución.
Conclusión
Los ejemplos en este tutorial son útiles, pero no pretenden reemplazar completamente la utilidad de cron. Depende de ti encontrar cuál funciona mejor para ti, pero si tenemos que separar el uso de ambas técnicas, diría esto:
- Usa cron cuando necesites ejecutar comandos periódicamente incluso después de reinicios del sistema.
- Utilice los métodos explicados en este tutorial para programas/scripts que están destinados a 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.
Source:
https://www.tecmint.com/run-repeat-linux-command-every-x-seconds/