Réponses:
Le but de watchest d'afficher les résultats d'une commande en plein écran et de les mettre à jour en continu; si vous redirigez la sortie dans un fichier et que vous le mettez en arrière-plan, il n'y a vraiment aucune raison d'utiliser watch en premier lieu.
Si vous souhaitez simplement exécuter une commande encore et encore avec un délai ( watchattend deux secondes par défaut), vous pouvez utiliser quelque chose comme ceci:
while true; do
cmd >> output.txt
sleep 2
done
Voici un moyen:
watch -n 1 'date' &>/dev/null &
Puisque vous planifiez le processus, nous pouvons supposer que vous n'avez pas besoin de l'affichage du terminal et que vous êtes en train de rediriger vers un fichier. Si vous faites cela, vous pourrez faire un historique watchsans problème.
sleep, comme l'a suggéré Michael Mrozek, tardera lentement, ce qui peut être indésirable. Mis à part un script shell alambiqué qui surveille l'heure système et exécute une commande basée sur le temps écoulé, watch -ppeut être une bonne option pour des temporisations précises.
Pour des horaires précis:
watch -n 1 -p 'date' &>/dev/null &
&deux fois?
man bashpour voir comment fonctionne le premier &. ;)
Je ne suis pas sûr de vos motivations, mais ce serait peut-être suffisant?
while true; do sleep 2; cmd >>output.txt; done &
Sinon, veuillez expliquer pourquoi vous en avez vraiment besoin watch.
Dépend de vos motivations:
Vous voulez exécuter quelque chose périodiquement. Ensuite, vous pouvez utiliser directement cron. (Si une granularité de temps de 1 minute est suffisante pour vos besoins).
Vous voulez simplement exécuter quelque chose à plusieurs reprises:
while sleep 2 ; do
cmd
done >& log.txt
(Vous pouvez l'exécuter à partir de la crontab par exemple, bien que l'utilisation d'un script soit fortement recommandée).
Vous souhaitez exécuter périodiquement une commande et avoir accès à la sortie de sa dernière exécution.
Vous pouvez écrire la sortie dans un ramfs (en modifiant le script avant):
while sleep 2 ; do
cmd >& last_execution.log
done
ou encore mieux:
while sleep 2 ; do
cmd >& last_execution.log.tmp
mv last_execution.log.tmp last_execution.log ## atomically
done Vous pouvez combiner screenet watch, afin que vous puissiez toujours vérifier le dernier état, tant qu'il tient dans un seul écran:
screen watch -n 3660 ./make-backup.shVous pouvez utiliser la commande d'écran.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html