GNU/Linux >> Tutoriels Linux >  >> Linux

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

Un administrateur système a souvent besoin d'exécuter une commande à plusieurs reprises dans un certain laps de temps. Souvent, ces tâches peuvent être facilement exécuté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 d'une minute. 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 en cours d'exécution continue similaire à la commande top (surveiller en continu 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 crois que tout le monde a des raisons différentes pour cela dans son travail quotidien ou même à la maison sur des PC et des ordinateurs portables.

1. Utiliser la commande watch

Regarder est une commande Linux qui vous permet d'exécuter périodiquement une commande ou un programme et vous montre également la sortie à l'écran. Cela signifie que vous pourrez voir la sortie du programme à temps. Par défaut, la montre relance 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 tout de suite 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 la sortie ci-dessus, vous avez 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 le -t option.

La prochaine question logique est :comment modifier l'intervalle d'exécution ? À cette fin, vous pouvez utiliser le -n option, 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 script.sh fichier toutes les 10 secondes, vous pouvez le faire comme ceci :

# watch -n 10 script.sh

Remarque que si vous exécutez la commande comme indiqué ci-dessus, vous devrez cd vers le répertoire (learn Learn 15 cd Command Examples) où se trouve le script ou sinon spécifiez le chemin complet vers ce script.

Les autres options utiles de la commande watch sont :

  1. -b – crée un bip sonore 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 changements dans la sortie 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, le 'uptime' La commande 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 cp commande, 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 watch 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. Utiliser la commande sleep

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

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

Si c'est la première fois que vous entendez parler du "sleep" commande, il est utilisé pour retarder quelque chose pendant un laps de temps spécifié. 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 nombre de secondes, puis réexécutez 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, au total 10 fois, 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 changer l'écho et date commandes avec vos propres commandes ou script et modifiez l'intervalle de veille selon vos besoins.

Exemple de boucle while

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

Voici un exemple de sortie :

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 supprimée ou interrompue par l'utilisateur. Cela peut être 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 celle qui 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 des commentaires ci-dessous.


Linux
  1. Comment utiliser la commande Su sous Linux

  2. Comment répéter une commande jusqu'à ce qu'elle réussisse sous Linux

  3. Répéter une commande Unix toutes les X secondes pour toujours ?

  4. Regarder :répéter les commandes Unix ou les scripts Shell toutes les N secondes

  5. Comment exécuter à plusieurs reprises un script bash toutes les N secondes ?

Comment exécuter une commande pendant une durée spécifique sous Linux

Comment exécuter une commande Linux toutes les X secondes pour toujours

Comment exécuter une commande périodiquement sous Linux à l'aide de Watch

Comment exécuter plusieurs commandes Linux en une seule commande

Comment exécuter plusieurs commandes Linux à la fois dans le terminal Linux

Comment puis-je regarder mes flux de webcams sous Linux ?