Quand je cours:
watch 'cmd >> output.txt' &
le travail est suspendu par le système:
3569 arrêté (TTY SORTIE)
Y at-il un travail autour?
Le but de watch
est de montrer les résultats d'une commande en plein écran et de mettre à jour en permanence; Si vous redirigez la sortie dans un fichier et que vous avez une explosion, il n'y a vraiment aucune raison d'utiliser la montre en premier lieu.
Si vous voulez simplement exécuter une commande encore et encore avec un retard (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 &
Depuis que vous avez passé le processus, nous pouvons supposer que vous n'avez pas besoin de l'affichage du terminal et vous redirigez bien dans un fichier. Si vous le faites, vous serez en mesure de faire de l'arrière-plan watch
sans problème.
sleep
, comme suggéré par Michael Mrozek, sera lentement à la traîne qui peut être indésirable. Outre un script de shell convolué qui surveille le temps système et exécute une commande basée sur le temps écoulé, watch -p
peut être une bonne option pour des horaires précis.
Pour des timings précis:
watch -n 1 -p 'date' &>/dev/null &
Je ne suis pas sûr de vos motivations, mais peut-être que cela suffirait-il?
while true; do sleep 2; cmd >>output.txt; done &
Sinon, veuillez expliquer pourquoi vous avez vraiment besoin de watch
.
Dépend de vos motivations:
Vous voulez courir quelque chose périodiquement. Ensuite, vous pourriez utiliser directement cron. (Si une granularité de temps de 1 minute est suffisante pour vos besoins).
Vous voulez juste courir quelque chose à plusieurs reprises:
while sleep 2 ; do
cmd
done >& log.txt
(Vous pouvez exécuter cela à partir du 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 sur une RAMFS (modifier le script avant):
while sleep 2 ; do
cmd >& last_execution.log
done
ou même 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 statut, à condition que cela puisse dans une case.
screen watch -n 3660 ./make-backup.sh
tee
est votre ami. Par exemple, voici comment vous pouvez afficher le nombre de fichiers dans le répertoire actuel et l'ajouter à compter.txt toutes les 2 secondes:
watch 'find . -maxdepth 1 -printf " " | wc -c | tee --append count.txt'
Vous pouvez utiliser la commande d'écran.
http://www.ycyberciti.biz/tips/linux-screen-command-howto.html
Si vous devez utiliser watch
- Combinez simplement des réponses de Mike Dangelo et L0B
watch -n 1 'cmd | tee -a output.txt' &>/dev/null &
par exemple.
watch -n 1 'date | tee -a output.txt' &>/dev/null &
puis regardez les secondes passez
tail -f output.txt
Watch est conçu pour sortir à l'écran, mais la sortie peut être redirigée (STDOUT et STDERR), puis il fonctionnera en arrière-plan.
watch 'date >>fa' >/dev/null 2>/dev/null &