Comment répéter une commande à chaque intervalle de temps pour pouvoir exécuter des commandes de vérification ou de surveillance des répertoires?
Il n'y a pas besoin d'un script, j'ai juste besoin d'une simple commande à exécuter dans un terminal.
Comment répéter une commande à chaque intervalle de temps pour pouvoir exécuter des commandes de vérification ou de surveillance des répertoires?
Il n'y a pas besoin d'un script, j'ai juste besoin d'une simple commande à exécuter dans un terminal.
Vous pouvez utiliser watch
commande, watch est utilisé pour exécuter toute commande désignée à intervalles réguliers.
Ouvrez le terminal et tapez:
watch -n x <your command>
changez x pour être le temps en secondes que vous voulez.
Pour obtenir de l'aide supplémentaire sur l'utilisation de la watch
commande et de ses options, exécutez man watch
ou visitez ce lien .
Par exemple: ce qui suit va lister, toutes les 60 secondes , sur le même terminal, le contenu du répertoire Desktop afin que vous puissiez savoir si des modifications ont eu lieu:
watch -n 60 ls -l ~/Desktop
watch -n 1 'echo $COLUMNS'
etwatch -n 1 echo $COLUMNS
lors du redimensionnement de votre terminal: le premier est développé toutes les secondes, mais le dernier n’est développé qu’une fois avant lewatch
début.watch
avec une commande de type "historique activé"? J'aime utiliserwatch
, mais parfois je préférerais voir un journal des exécutions précédentes aussi bien que juste la dernière. Et oui, je sais que je peux utiliser un script (while true
) pour accomplir cela, mais l’watch
utilitaire est beaucoup plus propre!Vous pouvez également utiliser cette commande dans terminal, en dehors de la réponse de nux:
Exemple
Cette commande affichera la sortie tous les
ls
2 secondes.Utilisez Ctrl+ Cpour arrêter le processus.
Il y a peu d'inconvénients de
watch
watch
interprétera les séquences de couleurs ANSI en transmettant les caractères d'échappement à l'aide de l' option-c
ou--color
. Par exemple, la sortie depygmentize
travaillera mais échouera pourls --color=auto
.Dans les circonstances ci-dessus, cela peut sembler une meilleure option.
la source
watch
existe pour cela, c'est un peu inutile je diraiswatch
est bon dans la plupart des cas. C'est pourquoi j'ai mentionné "en dehors de la réponse de Nux" au début. Mais il y a peu de problèmes avecwatch
par exemple On ne peut utiliser aucune commande avec aliaswatch
. Prenons l'exemple de l'll
alias quils -laF
ne peut être utilisé avecwatch
. De même, si le résultat d’une commande est assez long, vous aurez du mal à faire défiler avecwatch
. Dans ces quelques cas particuliers, cette réponse peut sembler une meilleure option.watch
au moins autorise les options-c
ou--color
pour une sortie colorisée.while sleep x
c'est mieux - c'est plus facile à tuer.watch
cela, elle conserve l'historique des commandes.Je voulais juste apporter ma réponse aux réponses de souravc et nux :
watch
cela fonctionne parfaitement sur Ubuntu, vous voudrez peut-être éviter cela si vous voulez que votre "Unix-fu" soit pur - sur FreeBSD par exemple, watch est une commande pour "espionner sur une autre ligne de tty".while true; do command; sleep SECONDS; done
a aussi une mise en garde - votre commande pourrait être plus difficile à tuer en utilisant CTR + C . Vous voudrez peut-être préférerwhile sleep SECONDS; do command; done
- c'est non seulement plus court, mais aussi plus facile à interrompre. La mise en garde est qu'il va d'abord dormir, puis exécuter votre commande, vous devrez donc attendreSECONDS
avant que la première occurrence de la commande se produise.la source
sleep
dans lawhile
boucle? Je ne trouvais aucune différence, Ctrl + C rompait instantanément la boucle, peu importe quoi.command
etsleep
et ne casserait que si vous le tuieztrue
.Cela semble être la tâche idéale du
cron
démon, qui permet d’exécuter des commandes périodiques. Exécutez lacrontab -e
commande pour commencer à modifier la configuration cron de votre utilisateur. Son format est documenté dans crontab (5) . En gros, vous avez cinq champs liés au temps, séparés par des espaces, suivis d'une commande:Par exemple, si vous souhaitez exécuter un script Python tous les mardis, 11 heures:
Il y a aussi des noms spéciaux qui remplacent l'heure, comme
@reboot
. Très utile si vous devez créer un répertoire temporaire. De ma crontab (listée aveccrontab -l
):la source
cron
se passe dans les coulisses plutôt que dans le terminalSi vous surveillez le système de fichiers, il
inotifywait
est brillant et ajoute certainement moins de charge sur votre système.Exemple :
Au 1er terminal tapez cette commande:
Ensuite, dans 2nd terminal, toute commande qui affecte le répertoire en cours,
Puis inotifywait dans le terminal d'origine se réveille et rapporte l'événement
Ou en boucle
la source
grep something InALogFile|less
s'agit-il d'un script?.
je ne peux pas laisser de côté la commande.-m
pour surveiller en continu sans boucle.Vous pouvez créer votre propre
repeat
commande en procédant comme suit: crédits ici :Commencez par ouvrir votre
.bash_aliases
fichier:Deuxièmement, collez ces lignes au bas du fichier et enregistrez:
Troisièmement, fermez et rouvrez votre terminal ou tapez:
Et voilà ! Vous pouvez maintenant l'utiliser comme ceci:
ou
la source
vous pouvez utiliser crontab. lancez la commande
crontab -e
et ouvrez-la avec votre éditeur de texte préféré, puis ajoutez cette ligneCela lancera votre commande toutes les 10 minutes
Cela exécutera votre commande toutes les 4 heures
Une autre solution possible
X nombre de fois à répéter.
Y le temps d'attendre pour répéter.
Exemple :
la source
L’approche «veille» proposée ci-dessus pose un autre problème: elle n’affiche le résultat que lorsque le processus est terminé. "date; sommeil 58; date" affichera les 2 dates seulement après 59 secondes ... Si vous démarrez quelque chose pendant 4 minutes, si vous affichez lentement plusieurs pages de contenu, vous ne le verrez pas vraiment.
D'autre part, le problème avec l'approche "tant que" est qu'elle ne prend pas en compte la durée de la tâche.
Avec cela, le script s'exécutera toutes les minutes, parfois 1m40. Donc même si un cron sera capable de le lancer toutes les minutes, ici, il ne le fera pas.
Donc, pour voir la sortie sur le shell telle qu'elle est générée et attendre l'heure exacte de la requête, vous devez regarder l'heure avant et après et boucler avec.
Quelque chose comme:
Cela produira ceci:
Comme vous pouvez le constater, la commande s’exécute toutes les minutes:
Il suffit donc de remplacer la
echo $(( ( RANDOM % 30 ) + 1 ))
commande "sleep " par ce que vous voulez et qui sera exécutée, sur le terminal / shell, exactement chaque minute. Si vous voulez un autre horaire, il suffit de changer les "60" secondes avec tout ce dont vous avez besoin.Version plus courte sans les lignes de débogage:
la source