Recherche de site Web

Comment exécuter ou répéter une commande Linux toutes les X secondes pour toujours


Un administrateur système doit souvent exécuter une commande à plusieurs reprises sur une certaine période de temps. Souvent, ces tâches peuvent être facilement réalisées avec de simples commandes cron. Dans la plupart des cas, cela devrait fonctionner, mais la période la plus courte pendant laquelle vous pouvez exécuter la commande cron est toutes les minutes. Croyez-le ou non, dans de nombreux cas, c'est trop lent.

Dans ce didacticiel, vous apprendrez des techniques de script simples pour surveiller ou garder un œil sur une commande particulière dans un état d'exécution continue similaire à la commande top (surveiller en permanence le processus et l'utilisation de la mémoire) toutes les 3 secondes par défaut.

Nous ne nous arrêterons pas pour discuter des raisons pour lesquelles vous auriez besoin d’exécuter des commandes aussi souvent. Je pense que tout le monde a des raisons différentes à cela dans son travail quotidien ou même à la maison avec son PC et son ordinateur portable.

1. Utilisez la commande watch

Watch est une commande Linux qui vous permet d'exécuter une commande ou un programme périodiquement et vous affiche également le résultat à l'écran. Cela signifie que vous pourrez voir le résultat du programme à temps. Par défaut, la montre réexécute la commande/le programme toutes les 2 secondes. L'intervalle peut être facilement modifié pour répondre à vos besoins.

Surveiller l'utilisation de la mémoire

« Watch » est extrêmement simple à utiliser, pour le tester, vous pouvez immédiatement lancer un terminal Linux et taper la commande suivante :

watch free -m

La commande ci-dessus vérifiera la mémoire libre de votre système et mettra à jour les résultats de la commande gratuite toutes les deux secondes.

Comme le montre le résultat ci-dessus, vous disposez d'un en-tête affichant des informations sur (de gauche à droite) l'intervalle de mise à jour, la commande en cours d'exécution et l'heure actuelle. Si vous souhaitez masquer cet en-tête, vous pouvez utiliser l'option -t.

La prochaine question logique est : comment modifier l'intervalle d'exécution. Pour cela, vous pouvez utiliser l'option -n, qui spécifie l'intervalle avec lequel la commande sera exécutée. Cet intervalle est spécifié en secondes. Supposons que vous souhaitiez exécuter votre fichier script.sh toutes les 10 secondes, vous pouvez le faire comme ceci :

watch -n 10 script.sh

Notez que si vous exécutez la commande comme indiqué ci-dessus, vous devrez cd dans le répertoire (apprenez Apprendre 15 exemples de commandes cd) où où se trouve le script ou spécifiez le chemin d'accès complet à ce script.

Les autres options utiles de la commande watch sont :

  1. -b : crée un bip si la sortie de la commande est différente de zéro.
  2. -c – Interprète les séquences de couleurs ANSI.
  3. -d – met en évidence les modifications dans le résultat de la commande.

Surveiller les utilisateurs connectés, la disponibilité et la charge moyenne

Supposons que vous souhaitiez surveiller les utilisateurs connectés, la disponibilité du serveur et la sortie moyenne de charge en phase continue toutes les quelques secondes, puis utilisez la commande suivante comme indiqué :

watch uptime

Pour quitter la commande, appuyez sur CTRL+C.

Ici, la commande 'uptime' s'exécutera et affichera les résultats mis à jour toutes les 2 secondes par défaut.

Surveiller la progression de la commande de copie

Sous Linux, lors de la copie de fichiers d'un emplacement à un autre à l'aide de la commande cp, la progression des données n'est pas affichée. Pour voir la progression des données en cours de copie, vous pouvez utiliser la commande watch commande avec la commande du -s pour vérifier l'utilisation du disque en temps réel.

cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso 

Si vous pensez que le processus ci-dessus est trop compliqué à réaliser, je vous suggère d'opter pour la commande de copie avancée, qui affiche la progression des données lors de la copie.

2. Utilisez la commande sleep

Sleep est souvent utilisé pour déboguer les scripts shell, mais il a également de nombreux autres objectifs utiles. Par exemple, lorsqu'il est combiné avec des boucles for ou while, vous pouvez obtenir des résultats assez impressionnants.

Si vous débutez dans les scripts bash, vous pouvez consulter notre guide sur les boucles bash ici.

Si c'est la première fois que vous entendez parler de la commande "sleep", elle est utilisée pour retarder quelque chose pendant une durée spécifiée. Dans les scripts, vous pouvez l'utiliser pour indiquer à votre script d'exécuter la commande 1, d'attendre 10 secondes, puis d'exécuter la commande 2.

Avec les boucles ci-dessus, vous pouvez dire à bash d'exécuter une commande, de dormir pendant N secondes, puis d'exécuter à nouveau la commande.

Ci-dessous, vous pouvez voir des exemples des deux boucles :

Exemple de boucle for

for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done

La ligne ci-dessus exécutera la commande echo et affichera la date actuelle, 10 fois au total, avec 5 secondes de sommeil entre les exécutions.

Voici un exemple de sortie :

This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016
This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016
This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016
This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016
This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016
This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016
This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016
This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016
This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016
This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016

Vous pouvez modifier les commandes echo et date avec vos propres commandes ou scripts et modifier l'intervalle de sommeil selon vos besoins.

boucle while Exemple

while true; do echo -n "This is a test of while loop";date ; sleep 5; done

Voici un exemple de résultat :

This is a test of while loopWed Feb 17 20:52:32 EET 2016
This is a test of while loopWed Feb 17 20:52:37 EET 2016
This is a test of while loopWed Feb 17 20:52:42 EET 2016
This is a test of while loopWed Feb 17 20:52:47 EET 2016
This is a test of while loopWed Feb 17 20:52:52 EET 2016
This is a test of while loopWed Feb 17 20:52:57 EET 2016

La commande ci-dessus s'exécutera jusqu'à ce qu'elle soit interrompue ou interrompue par l'utilisateur. Cela peut s'avérer utile si vous devez exécuter une commande en arrière-plan et que vous ne voulez pas compter sur cron.

Important : lorsque vous utilisez les méthodes ci-dessus, il est fortement recommandé de définir un intervalle suffisamment long pour donner suffisamment de temps à votre commande pour terminer son exécution, avant la prochaine exécution.

Conclusion

Les exemples de ce didacticiel sont utiles, mais ne sont pas destinés à remplacer complètement l'utilitaire cron. C'est à vous de trouver laquelle vous convient le mieux, mais si nous devons séparer l'utilisation des deux techniques, je dirais ceci :

  1. Utilisez cron lorsque vous devez exécuter des commandes périodiquement, même après le redémarrage du système.
  2. Utilisez les méthodes expliquées dans ce didacticiel pour les programmes/scripts destinés à s'exécuter dans la session utilisateur en cours.

Comme toujours, si vous avez des questions ou des commentaires, n'hésitez pas à les soumettre dans la section commentaires ci-dessous.