¿Cómo puedo repetir un comando cada intervalo de tiempo, de modo que me permita ejecutar comandos para verificar o monitorear directorios?
No hay necesidad de un script, solo necesito un comando simple para ejecutar en la terminal.
¿Cómo puedo repetir un comando cada intervalo de tiempo, de modo que me permita ejecutar comandos para verificar o monitorear directorios?
No hay necesidad de un script, solo necesito un comando simple para ejecutar en la terminal.
Puede usar el watchcomando, watch se usa para ejecutar cualquier comando designado a intervalos regulares.
Abra la Terminal y escriba:
watch -n x <your command>
cambie x para que sea el tiempo en segundos que desee.
Para obtener más ayuda con el watchcomando y sus opciones, ejecute man watcho visite este enlace .
Por ejemplo: lo siguiente enumerará, cada 60s , en la misma Terminal, el contenido del directorio del Escritorio para que pueda saber si se produjo algún cambio:
watch -n 60 ls -l ~/Desktop
watch -n 1 'echo $COLUMNS'ywatch -n 1 echo $COLUMNSal cambiar el tamaño de su terminal: el primero se expande cada segundo, pero el segundo se expande solo una vez antes dewatchcomenzar.watchcon el comando de tipo "historial habilitado"? Me encanta usarwatch, pero a veces prefiero ver un registro de ejecuciones anteriores también, en lugar de solo la última. Y sí, sé que puedo usar scripting (while true) para lograr esto, ¡pero usar lawatchutilidad es mucho más limpio!También puede usar este comando en la terminal, aparte de la respuesta de nux:
Ejemplo
Este comando imprimirá la salida
lsen un intervalo de 2 segundos.Use Ctrl+ Cpara detener el proceso.
Hay algunos inconvenientes de
watchwatchinterpretará las secuencias de color ANSI que pasan caracteres de escape utilizando-cu--coloropción. Por ejemplo, la salida depygmentizefuncionará pero fallaráls --color=auto.En las circunstancias anteriores, esto puede aparecer como una mejor opción.
fuente
watchexiste para eso, esto es un poco inútil, diría yowatchEs bueno en la mayoría de los casos. Es por eso que mencioné "aparte de la respuesta de nux" al principio. Pero hay algunos problemas con,watchpor ejemplo, uno no puede usar ningún comando con aliaswatch. Tomemos, por ejemplo, unllaliasls -laFpero que no se puede usar conwatch. Además, en caso de que la salida de cualquier comando sea bastante larga, tendrá problemas para desplazarse usandowatch. En estos pocos casos especiales, esta respuesta puede parecer una mejor opción.watchal menos permite las opciones-cu--colorpara salida coloreada.while sleep xes mejor, es más fácil de matar.watch, mantiene el historial de comandos.Solo quería participar en las respuestas de souravc y nux :
watchfuncionará perfectamente en Ubuntu, es posible que desee evitar eso si desea que su "Unix-fu" sea puro, por ejemplo, en FreeBSD, watch es un comando para "espiar en otra línea tty".while true; do command; sleep SECONDS; doneTambién tiene una advertencia - el comando podría ser más difícil de matar usando CTR + C . Es posible que desee preferirwhile sleep SECONDS; do command; done: no solo es más corto, sino también más fácil de interrumpir. La advertencia es que primero dormirá, luego ejecutará su comando, por lo que deberá esperar un pocoSECONDSantes de que ocurra el primer comando.fuente
sleepen elwhilebucle? No pude encontrar ninguna diferencia, Ctrl + C rompió el ciclo instantáneamente sin importar qué.commandysleepy solo se rompería si matastrue.Suena como la tarea ideal para el
crondemonio que permite ejecutar comandos periódicos. Ejecute elcrontab -ecomando para comenzar a editar la configuración cron de su usuario. Su formato está documentado en crontab (5) . Básicamente tiene cinco campos separados por espacios y relacionados con el tiempo seguidos de un comando:Por ejemplo, si desea ejecutar un script de Python todos los martes a las 11 AM:
También hay algunos nombres especiales que reemplazan el tiempo, como
@reboot. Muy útil si necesita crear un directorio temporal. Desde mi crontab (listado concrontab -l):fuente
croncorre detrás de las escenas en lugar de en la terminalSi está monitoreando el sistema de archivos, entonces
inotifywaites brillante y ciertamente agrega menos carga en su sistema.Ejemplo:
En el primer terminal, escriba este comando:
Luego, en la segunda terminal, cualquier comando que afecte el directorio actual,
Luego, en la terminal original, Inotifywait se despertará e informará el evento
O en un bucle
fuente
grep something InALogFile|lesses un script?.no puedo dejar de lado el comando.-mpara monitorear continuamente sin un bucle.Puede crear su propio
repeatcomando siguiendo los siguientes pasos; créditos aquí :Primero, abra su
.bash_aliasesarchivo:En segundo lugar, pegue estas líneas en la parte inferior del archivo y guarde:
Tercero, cierre y abra nuevamente su terminal o escriba:
Et voilà! Ahora puede usarlo así:
o
fuente
puedes usar crontab. ejecute el comando
crontab -ey ábralo con su editor de texto preferido, luego agregue esta líneaEsto ejecutará tu comando cada 10 minutos
Esto ejecutará su comando cada 4 horas.
Otra posible solución
X número de veces para repetir.
Y tiempo de esperar para repetir.
Ejemplo:
fuente
Otra preocupación con el enfoque de "observación" propuesto anteriormente es que muestra el resultado solo cuando se realiza el proceso. "date; sleep 58; date" mostrará las 2 fechas solo después de 59 segundos ... Si comienza a ejecutar algo durante 4 minutos, que muestra lentamente varias páginas de contenido, realmente no lo verá.
Por otro lado, la preocupación con el enfoque "while" es que no toma en cuenta la duración de la tarea.
Con esto, el script se ejecutará en algún momento cada minuto, en algún momento puede tomar 1m40. Entonces, incluso si un cron podrá ejecutarlo cada minuto, aquí no lo hará.
Entonces, para ver la salida en el shell a medida que se genera y esperar el tiempo de solicitud exacto, debe mirar el tiempo antes y después, y recorrer el tiempo.
Algo como:
Esto generará esto:
Como puede ver, el comando se ejecuta cada minuto:
Así que simplemente reemplace el
echo $(( ( RANDOM % 30 ) + 1 ))comando "dormir " con lo que quiera y se ejecutará, en el terminal / shell, exactamente cada minuto. Si desea otro horario, simplemente cambie los "60" segundos con lo que necesite.Versión más corta sin las líneas de depuración:
fuente