Risposte:
Lo scopo di watch
è mostrare i risultati di un comando a schermo intero e aggiornarli continuamente; se stai reindirizzando l'output in un file e in background non c'è davvero alcun motivo per usare watch in primo luogo.
Se vuoi semplicemente eseguire un comando più volte con un ritardo ( watch
aspetta due secondi per impostazione predefinita), puoi usare qualcosa del genere:
while true; do
cmd >> output.txt
sleep 2
done
Ecco un modo:
watch -n 1 'date' &>/dev/null &
Dato che si esegue il background del processo, si può presumere che non sia necessario il display del terminale e che si stia reindirizzando a un file. Se lo fai, sarai in grado di eseguire lo sfondo watch
senza problemi.
sleep
, come suggerito da Michael Mrozek, rallenterà lentamente, il che può essere indesiderabile. A parte uno script shell contorto che controlla il tempo di sistema ed esegue un comando basato sul tempo trascorso, watch -p
può essere una buona opzione per tempi precisi.
Per tempi precisi:
watch -n 1 -p 'date' &>/dev/null &
&
due volte?
man bash
per vedere come funziona la prima &
. ;)
Non sono sicuro delle tue motivazioni, ma forse questo sarebbe abbastanza?
while true; do sleep 2; cmd >>output.txt; done &
Altrimenti, spiega perché ne hai davvero bisogno watch
.
Dipende dalle tue motivazioni:
Vuoi eseguire periodicamente qualcosa. Quindi puoi usare direttamente cron. (Se una granularità temporale di 1 minuto è sufficiente per i tuoi scopi).
Vuoi eseguire qualcosa ripetutamente:
while sleep 2 ; do
cmd
done >& log.txt
(È possibile eseguire questo dal crontab per esempio, anche se è fortemente raccomandato l'uso di uno script).
Volete eseguire periodicamente un comando e avere accesso all'output della sua ultima esecuzione.
Puoi scrivere l'output su un ramfs (modificando prima lo script):
while sleep 2 ; do
cmd >& last_execution.log
done
o anche meglio:
while sleep 2 ; do
cmd >& last_execution.log.tmp
mv last_execution.log.tmp last_execution.log ## atomically
done
È possibile combinare screen
e watch
, in modo da poter sempre controllare lo stato più recente, purché si adatti a una schermata:
screen watch -n 3660 ./make-backup.sh
È possibile utilizzare il comando schermo.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html