Respuestas:
El propósito de watches 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 ( watchespera 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 watchsin 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 -ppuede ser una buena opción para tiempos precisos.
Para tiempos precisos:
watch -n 1 -p 'date' &>/dev/null &
&dos veces?
man bashpara 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 screeny watch, para que siempre pueda verificar el estado más reciente, siempre que quepa en una pantalla:
screen watch -n 3660 ./make-backup.shPuedes usar el comando de pantalla.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html