Respuestas:
El propósito de watch
es mostrar los resultados de un comando en pantalla completa y actualizar continuamente; si está redirigiendo la salida a un archivo y está en segundo plano, en realidad no hay razón para usar watch en primer lugar.
Si desea ejecutar un comando una y otra vez con un retraso ( watch
espera dos segundos por defecto), puede usar algo como esto:
while true; do
cmd >> output.txt
sleep 2
done
Aquí hay una manera:
watch -n 1 'date' &>/dev/null &
Dado que realiza el proceso en segundo plano, podemos suponer que no necesita la pantalla del terminal y que está bien redireccionando a un archivo. Si lo haces, podrás crear un fondo watch
sin problemas.
sleep
, como lo sugiere Michael Mrozek, se retrasará lentamente, lo que puede ser indeseable. Además de un script de shell complicado que monitorea la hora del sistema y ejecuta un comando basado en el tiempo transcurrido, watch -p
puede ser una buena opción para tiempos precisos.
Para tiempos precisos:
watch -n 1 -p 'date' &>/dev/null &
&
dos veces?
man bash
para ver cómo funciona el primero &
. ;)
No estoy seguro de tus motivaciones, pero ¿tal vez esto sea suficiente?
while true; do sleep 2; cmd >>output.txt; done &
De lo contrario, explique por qué realmente lo necesita watch
.
Depende de tus motivaciones:
Desea ejecutar algo periódicamente. Entonces podrías usar directamente cron. (Si una granularidad de tiempo de 1 minuto es suficiente para sus propósitos).
Solo quieres ejecutar algo repetidamente:
while sleep 2 ; do
cmd
done >& log.txt
(Puede ejecutar esto desde el crontab, por ejemplo, aunque se recomienda usar un script).
Desea ejecutar periódicamente un comando y tener acceso a la salida de su última ejecución.
Puede escribir la salida en un ramfs (modificando el script antes):
while sleep 2 ; do
cmd >& last_execution.log
done
o mejor:
while sleep 2 ; do
cmd >& last_execution.log.tmp
mv last_execution.log.tmp last_execution.log ## atomically
done
Puede combinar screen
y watch
, para que siempre pueda verificar el estado más reciente, siempre que quepa en una pantalla:
screen watch -n 3660 ./make-backup.sh
Puedes usar el comando de pantalla.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html