Réponses:
Le but de watch
est 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 ( watch
attend 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 watch
sans 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 -p
peut être une bonne option pour des temporisations précises.
Pour des horaires précis:
watch -n 1 -p 'date' &>/dev/null &
&
deux fois?
man bash
pour 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 screen
et 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.sh
Vous pouvez utiliser la commande d'écran.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html