script Linux - exec...
 
Notifications
Retirer tout

script Linux - executer une commande à interval régulier

 Toff
(@toff)
Membre estimable

Bonsoir tout le monde!

Je suis sous RedHat 5 au bureau et je voudrai surveiller la consommation mémoire d'un process en particulier au cours du temps. Ne connaissant pas d'outils pour faire ça de manière simple et efficace, j'ai d'abord pensé à faire un top et à rester devant pour observer la mémoire max, mais il s'agit en fait d'un calcul élément fini et cela peut prendre des heures, voire des jours entiers...

Une autre solution à laquelle je pense est d'aller choper dans le fichier /proc/#pid/status la ligne qui va bien et l'enregistrer dans un fichier ascii. Après c'est à moi de me taper le fichier en question pour trouver la valeur maximum...mais ça, je veux bien le faire.
J'aimerais donc automatiser un peu tout ça avec un script par exemple mais mon soucis est : comment faire pour que ma commande 'grep' s'exécute à intervale régulier ? genre toute les 30s, il va aller lire le fichier 'status' et écrire dans un fichier 'mémoire_max'.

Merci d'avance pour vos lumières 🙂

Citation
Initiateur du sujet Posté : 8 avril 2008 21 h 25 min
Malouk
(@malouk)
Membre illustre Admin

Bonsoir,

Il suffit d'ajouter ton script aux taches cron du serveur pour qu'elle soit exécutée tous les x temps

Dans le doute reboot, dans la tomate format !

RépondreCitation
Posté : 8 avril 2008 22 h 34 min
 Toff
(@toff)
Membre estimable

Oui j'ai vu cette solution mais en fait je ne connais pas le numéro de process à surveiller. A chaque nouveau calcul il y aura un nouveau pid... Je souhaiterai plutôt lancer le calcul, récupérer son pid et lancer le script ensuite pour le surveiller.

le server cron lui il faut être admin pour y toucher je crois et puis il se lance au démarrage de la station.

Merci en tout cas pour ta réponse rapide.

RépondreCitation
Initiateur du sujet Posté : 9 avril 2008 9 h 48 min
Malouk
(@malouk)
Membre illustre Admin

Oui, il faut un accès root pour ajouter des tâches au cron.

Mais bon vu que c'est un process lancé tous les x temps et que le pid va forcément changé à chaque fois, il faudrait carrément modifier le script pour qu'il crée un log à chaque fois

Dans le doute reboot, dans la tomate format !

RépondreCitation
Posté : 9 avril 2008 10 h 32 min
 Toff
(@toff)
Membre estimable

c'est bien ce que je pensais. C'est pour ça que je cherche une commande à mettre en début de script pour qu'il execute le 'grep' toutes les 30s par exemple. Bien sur à chaque nouveau calcul je modifierai le pid mais ce n'est pas un problème en fait car je ne ferai pas ce suivi à chaque fois, c'est vraiment occasionnel.

Il n'y a pas une commande du style "sleep 30 grep -name "/proc/#pid/status" "VMpeak" >> toto.txt if #pid existe encore go to debut script" ??

Merci Malouk.

RépondreCitation
Initiateur du sujet Posté : 9 avril 2008 11 h 12 min
Malouk
(@malouk)
Membre illustre Admin

Je ne sais plus trop comment fonctionne sleep, mais je pense que c'est simplement une commande qui "endort" le processus un moment, une fois ce délai écoulé, la commande s'exécute puis c'est fini.

Pour le ré-exécuter tous les x temps, il faudrait alors utiliser sleep dans une boucle. La boucle permettra de ré-exécuter la commande à chaque fois.

Dans le doute reboot, dans la tomate format !

RépondreCitation
Posté : 9 avril 2008 11 h 50 min
 Toff
(@toff)
Membre estimable

et tu sais comment je peux faire une boucle ?

Désolé mais c'est vrai que je ne connais pas les commandes linux et je n'ai rien trouvé sur le net hors mis sur le cron...

RépondreCitation
Initiateur du sujet Posté : 9 avril 2008 11 h 57 min
Malouk
(@malouk)
Membre illustre Admin

Heu, ça fait bien 5 ans que j'ai plus fait de boucle en linux. Il faudrait regarder sur Google.

Dans le doute reboot, dans la tomate format !

RépondreCitation
Posté : 9 avril 2008 14 h 29 min
 Toff
(@toff)
Membre estimable

Merci Malouk.

J'ai regardé un peu ce que je pouvais trouver comme boucle pour mon besoin et la fonction while devrait correspondre.
Si j'ai bien compris elle s'utilise comme suit:
while [condition] do [instruction] done;

Maintenant ma question est: puis-je tester l'existance d'un process ?
J'ai bien vu quelques "if exist" sur le net mais je n'ai pas vu comment ça marchait, enfin il y a des trucs mais je comprend pas tout...

Merci par avance.

RépondreCitation
Initiateur du sujet Posté : 9 avril 2008 21 h 30 min
Malouk
(@malouk)
Membre illustre Admin

en faisant un vérification dans /var/run il y a peut-être moyen

Dans le doute reboot, dans la tomate format !

RépondreCitation
Posté : 10 avril 2008 11 h 05 min
 Toff
(@toff)
Membre estimable

Bonjour,

Finalement j'ai trouvé quelque chose 🙂
Pour le test du process je n'ai pas été voir dans /var/run mais je pense que c'est pareil que /proc/#pid/status on doit y trouver les process existant.

Finalement j'ai bien utilisé la fonction while pour la boucle (plus exactement while true) et pour le test j'ai du le mettre dans une boucle if... Bref, je met le résultat ci-dessous au cas où...

#!/bin/bash
while true
do
if [ -f /proc/9178/status ]
then
grep "VmSize" /proc/9178/status >> memory_max
sleep 30
continue
else
break
fi
done

Pour info, la ligne à aller chercher dépend de l'OS (ou de la version du top peut être je ne sais pas). Par exemple sur ma station redhat 5 c'est VmPeak alors que sur la station de tests (je ne sais plus l'OS) c'est VmSize...

Evidemment il n'est pas complètement de moi, j'ai mis les bases, et quelqu'un l'a corrigé. Merci à lui d'ailleurs.

A+

RépondreCitation
Initiateur du sujet Posté : 13 avril 2008 17 h 47 min
Retour en haut