Comment répéter une commande toutes les N secondes sous Linux ?

Publié 17 octobre 2024

Problème : Répéter des Commandes Linux à Intervalles Réguliers

L'automatisation de l'exécution de commandes à intervalles réguliers est une tâche courante dans les systèmes Linux. Cela peut être utile pour surveiller les ressources système, exécuter des tâches périodiques ou mettre à jour des informations à des moments précis.

La Commande 'watch' : Une Solution Simple

Syntaxe de Base de la Commande 'watch'

La commande 'watch' sous Linux exécute des commandes de manière répétée à intervalles définis. C'est un outil intégré qui affiche le résultat d'une commande en plein écran, en le mettant à jour régulièrement.

Pour utiliser la commande 'watch', suivez cette syntaxe de base :

watch [options] commande

La commande que vous souhaitez répéter se place à la fin de la commande 'watch'. Par défaut, 'watch' exécute la commande spécifiée toutes les 2 secondes.

Pour définir un intervalle de temps personnalisé entre les répétitions, utilisez l'option '-n' suivie du nombre de secondes. Par exemple :

watch -n 5 commande

Cela exécutera la commande toutes les 5 secondes.

Vous pouvez également utiliser des valeurs décimales pour des intervalles plus courts :

watch -n 0.5 commande

Cela exécute la commande toutes les demi-secondes.

La commande 'watch' s'exécute jusqu'à ce que vous l'arrêtiez manuellement, généralement en appuyant sur Ctrl+C.

Conseil: Mettre en Évidence les Changements

Pour mettre en évidence les changements entre les mises à jour, utilisez l'option '-d' ou '--differences'. Cela facilite le repérage des modifications dans le résultat de la commande :

watch -d commande

Cela mettra en évidence toutes les différences dans le résultat entre les mises à jour, facilitant le suivi des changements au fil du temps.

Exemples Pratiques d'Utilisation de 'watch'

Surveiller les Changements de Taille de Fichier

La commande 'watch' aide à surveiller les changements de taille de fichier, utile lors d'importations ou de téléchargements de fichiers. Pour suivre les changements de taille de fichier, utilisez 'watch' avec la commande 'ls' :

watch -n 5 ls -l nomfichier

Cette commande affiche les détails du fichier, y compris sa taille, toutes les 5 secondes. C'est utile lors de l'importation de gros fichiers et que vous voulez voir si la taille augmente.

Pour surveiller plusieurs fichiers dans un répertoire, utilisez :

watch -n 5 'ls -l | grep nomfichier'

Cela affiche les détails de tous les fichiers contenant 'nomfichier' dans leur nom, avec une mise à jour toutes les 5 secondes.

Conseil: Mettre en Évidence les Changements

Utilisez l'option -d avec 'watch' pour mettre en évidence les différences entre les mises à jour. Par exemple :

watch -d -n 5 ls -l nomfichier

Cela mettra en évidence tous les changements dans les détails du fichier, facilitant le repérage des modifications.

Observer l'Utilisation des Ressources Système

'watch' est également utile pour surveiller les ressources système en temps réel. Pour observer l'utilisation du CPU, utilisez-le avec la commande 'top' :

watch -n 1 'top -b -n 1 | head -n 5'

Cela affiche les 5 premières lignes du résultat de la commande 'top', avec un rafraîchissement toutes les secondes.

Pour surveiller l'utilisation de la mémoire, combinez 'watch' avec la commande 'free' :

watch -n 2 free -m

Cela affiche l'utilisation de la mémoire en mégaoctets, avec une mise à jour toutes les 2 secondes.

Pour surveiller l'utilisation du disque, utilisez 'watch' avec la commande 'df' :

watch -n 10 df -h

Cela affiche l'utilisation du disque dans un format lisible, avec un rafraîchissement toutes les 10 secondes.

Personnalisation de la Sortie de 'watch'

Mettre en Évidence les Changements avec '--differences'

L'option '--differences' dans la commande 'watch' rend les changements plus visibles dans les sorties répétées. Cette option met en évidence les parties de la sortie qui ont changé depuis la dernière mise à jour.

Pour utiliser cette fonctionnalité, ajoutez le drapeau '-d' ou '--differences' à votre commande 'watch' :

watch -d commande

C'est utile lors de la surveillance de petits changements dans de grandes sorties. Par exemple, lors de la surveillance des processus système :

watch -d 'ps aux | sort -nrk 3,3 | head -n 5'

Cette commande affiche les 5 processus consommant le plus de CPU et met en évidence tous les changements dans les mises à jour.

Conseil: Améliorer la Lisibilité avec la Couleur

Utilisez l'option '--color' avec '--differences' pour rendre les changements encore plus visibles. Par exemple :

watch -d --color 'df -h'

Cette commande affichera les informations d'utilisation du disque et mettra en évidence les changements en couleur, facilitant le repérage des modifications d'utilisation de l'espace disque au fil du temps.

Utilisation de l'Option '--cumulative'

L'option '--cumulative' dans 'watch' fournit une mise en évidence cumulative, ce qui signifie qu'elle garde une trace de tous les changements au fil du temps, pas seulement des plus récents.

Pour utiliser cette option, ajoutez '--cumulative' à votre commande 'watch' :

watch --cumulative commande

Cette fonctionnalité est utile pour suivre tous les changements qui se sont produits depuis que vous avez commencé à surveiller. Par exemple, lors de la surveillance des fichiers journaux :

watch --cumulative 'tail -n 10 /var/log/syslog'

Cette commande affiche les 10 dernières lignes du journal système et met en évidence toutes les nouvelles entrées apparues depuis que vous avez commencé à surveiller.

L'option '--cumulative' est utile dans les scénarios où vous devez garder une trace de tous les changements sur une longue période, plutôt que seulement les plus récents.

Méthodes Alternatives pour la Répétition de Commandes

Utilisation des Boucles Bash

Les boucles Bash sont une autre façon de répéter des commandes sous Linux. Vous pouvez créer une boucle pour exécuter une commande plusieurs fois :

while true; do
    commande
    sleep 5
done

Cette boucle exécute la commande toutes les 5 secondes jusqu'à ce que vous l'arrêtiez manuellement (généralement avec Ctrl+C).

Avantages de l'utilisation des boucles bash :

  • Plus flexible pour les séquences de commandes complexes
  • Peut être modifié pour différents intervalles ou conditions
  • Fonctionne dans tous les environnements shell

Inconvénients par rapport à 'watch' :

  • Ne fournit pas de rafraîchissement automatique de la sortie
  • Nécessite plus de configuration
  • Peut être moins efficace pour les répétitions simples de commandes uniques

Conseil: Personnalisation du Comportement de la Boucle

Vous pouvez ajouter des instructions conditionnelles dans la boucle pour contrôler son comportement. Par exemple :

count=0
while [ $count -lt 10 ]; do
    commande
    sleep 5
    ((count++))
done

Cette boucle exécutera la commande 10 fois avant de s'arrêter.

Tâches Cron pour les Répétitions Planifiées

Les tâches cron sont utiles pour planifier l'exécution de commandes à des moments ou des intervalles spécifiques, en particulier pour des périodes plus longues :

Pour configurer une tâche cron, éditez le fichier crontab :

crontab -e

Puis ajoutez une ligne comme celle-ci pour exécuter une commande toutes les 30 minutes :

*/30 * * * * /chemin/vers/votre/commande

Cron est préférable à 'watch' quand :

  • Vous devez exécuter des commandes à des moments précis
  • L'intervalle entre les répétitions est long (heures, jours, semaines)
  • Vous voulez que la commande s'exécute en arrière-plan
  • Vous devez maintenir l'exécution de la commande même après vous être déconnecté

Cependant, 'watch' est plus approprié pour :

  • La surveillance en temps réel avec des intervalles plus courts
  • Les sessions interactives où vous devez voir la sortie immédiatement
  • La répétition temporaire de commandes pendant une seule session

Les boucles Bash et les tâches cron offrent des alternatives à 'watch' pour répéter des commandes, chacune avec ses propres forces selon le cas d'utilisation spécifique.