Respostas:
O objetivo de watch
é mostrar os resultados de um comando em tela cheia e atualizar continuamente; se você estiver redirecionando a saída para um arquivo e colocando-o em segundo plano, não há realmente nenhuma razão para usar o watch em primeiro lugar.
Se você deseja apenas executar um comando repetidamente com um atraso ( watch
espera dois segundos por padrão), você pode usar algo como isto:
while true; do
cmd >> output.txt
sleep 2
done
Aqui está uma maneira:
watch -n 1 'date' &>/dev/null &
Como você processa o processo em segundo plano, podemos presumir que você não precisa da exibição do terminal e você pode redirecionar para um arquivo. Se você fizer isso, poderá obter um plano de fundo watch
sem problemas.
sleep
, como sugerido por Michael Mrozek, ficará lento o que pode ser indesejável. Além de um shell script complicado que monitora a hora do sistema e executa um comando com base no tempo decorrido, watch -p
pode ser uma boa opção para horários precisos.
Para horários precisos:
watch -n 1 -p 'date' &>/dev/null &
&
duas vezes?
man bash
para ver como o primeiro &
funciona. ;)
Não tenho certeza sobre suas motivações, mas talvez isso seja suficiente?
while true; do sleep 2; cmd >>output.txt; done &
Caso contrário, explique por que você realmente precisa watch
.
Depende de suas motivações:
Você deseja executar algo periodicamente. Então você pode usar o cron diretamente. (Se uma granularidade de tempo de 1 minuto for suficiente para seus propósitos).
Você deseja executar algo repetidamente:
while sleep 2 ; do
cmd
done >& log.txt
(Você pode executar isso no crontab, por exemplo, embora seja altamente recomendável usar um script).
Você deseja executar periodicamente um comando e ter acesso à saída de sua última execução.
Você pode gravar a saída em um ramfs (modificando o script antes):
while sleep 2 ; do
cmd >& last_execution.log
done
ou melhor ainda:
while sleep 2 ; do
cmd >& last_execution.log.tmp
mv last_execution.log.tmp last_execution.log ## atomically
done
Você pode combinar screen
e watch
, para sempre verificar o status mais recente, desde que ele se encaixe em uma única tela:
screen watch -n 3660 ./make-backup.sh
Você pode usar o comando de tela.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html