¿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 watch
comando, 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 watch
comando y sus opciones, ejecute man watch
o 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 $COLUMNS
al cambiar el tamaño de su terminal: el primero se expande cada segundo, pero el segundo se expande solo una vez antes dewatch
comenzar.watch
con 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 lawatch
utilidad 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
ls
en un intervalo de 2 segundos.Use Ctrl+ Cpara detener el proceso.
Hay algunos inconvenientes de
watch
watch
interpretará las secuencias de color ANSI que pasan caracteres de escape utilizando-c
u--color
opción. Por ejemplo, la salida depygmentize
funcionará pero fallaráls --color=auto
.En las circunstancias anteriores, esto puede aparecer como una mejor opción.
fuente
watch
existe para eso, esto es un poco inútil, diría yowatch
Es 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,watch
por ejemplo, uno no puede usar ningún comando con aliaswatch
. Tomemos, por ejemplo, unll
aliasls -laF
pero 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.watch
al menos permite las opciones-c
u--color
para salida coloreada.while sleep x
es 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 :
watch
funcionará 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; done
Tambié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 pocoSECONDS
antes de que ocurra el primer comando.fuente
sleep
en elwhile
bucle? No pude encontrar ninguna diferencia, Ctrl + C rompió el ciclo instantáneamente sin importar qué.command
ysleep
y solo se rompería si matastrue
.Suena como la tarea ideal para el
cron
demonio que permite ejecutar comandos periódicos. Ejecute elcrontab -e
comando 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
cron
corre detrás de las escenas en lugar de en la terminalSi está monitoreando el sistema de archivos, entonces
inotifywait
es 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|less
es un script?.
no puedo dejar de lado el comando.-m
para monitorear continuamente sin un bucle.Puede crear su propio
repeat
comando siguiendo los siguientes pasos; créditos aquí :Primero, abra su
.bash_aliases
archivo: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 -e
y á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