Bonjour,
Je suis stagiaire depuis peu et on m'a confié l'exploitation d'un serveur.
En 1): on m'a demandé de créer un script pour surveiller le remplissage des file system ufs du serveur et d'indiquer une alarme lorsque celui ci depasse 80%.
Ci-joint le script que j'ai fait :
#!/bin/bash
df -k ufs | grep "%" | while read script1
do
script1_NAME=`echo $script1 | awk -F' ' '{print $1}'`
script1_SIZE=`echo $script1 | awk -F' ' '{print $5}' | cut -d'%' -f1`
if test $script1_SIZE -gt 80
then
echo "`date "+%d/%m/%y" Filesystem $FS_script1 utilisé à plus de ${script1_SIZE}%" >>Alarme.log
fi
done
En 2) on me demande de créer un script pour surveiller un ou plusieurs process sur le serveur. La liste des process et leur nombre doivent se trouver ds un fichier de paramètre. A chaque fois qu'un process est manquant il faut le signaler ds le fichier alarme.log
C'est pour le 2) que j'ai besoin de votre aide. Je pense à la cde ps ainsi que grep mais C la structure de ce script que je n'arrive pas à faire.
Merci d'avance pour votre aide.
# A mon avis ...
Posté par totof2000 . Évalué à 2.
personnellement c'est le genre de truc que je fais faire a awk.
En gros ca donne:
df -k ufs | awk '
/%/ {
sub("%","",$5)
if($5 >80) {
print "Filesystem " $1 "utilisé a "$5 "%"
}
} >>Alarme.log DATE=$(date "+%d/%m/%y")
[^] # Re: A mon avis ...
Posté par totof2000 . Évalué à 2.
df -k ufs | awk '
/%/ {
sub("%","",$5)
if($5 >80) {
print DATE " Filesystem " $1 "utilisé a "$5 "%"
}
} >>Alarme.log DATE=$(date "+%d/%m/%y")
[^] # Re: A mon avis ...
Posté par juju75020 . Évalué à 1.
# pour repondre a la question:
Posté par totof2000 . Évalué à 2.
J'aurais bien une solution à base de awk ....
en supposant que le fichier d'entrée soit de la forme:
nom_process Nombre Commande_relance et que le fichier se nomme liste.dat.
(exemple factice: pour sendmail):
sendmail 2 /sbin/sendmail
Essayé sur aix 5.1 (ca marche).
Moi j'aime bien awk ....
[^] # Re: pour repondre a la question:
Posté par totof2000 . Évalué à 2.
[^] # Re: pour repondre a la question:
Posté par juju75020 . Évalué à 1.
Ca doit etre un script répétitif et donc enregistré ds la crontab.
MA reponse te convient-elle ??
Je suis un peu en manque d'léments et pas très aidé par mon responsable !!
[^] # Re: pour repondre a la question:
Posté par totof2000 . Évalué à 2.
sinon, ce que je te demandais c'était le format de la liste de process et leur nombre.
Si tu es libre du format, c'est bien: tu n'as qu'à reprendre ce que je t'ai donné ci-dessus. Sinon, il faut le format de la liste en question et éventuellement adapter le script awk que je t'ai donné pour que ça marche.
As-tu compris ce que je t'ai donné ou as-tu besoin de plus d'explications?
[^] # Re: pour repondre a la question:
Posté par juju75020 . Évalué à 1.
J'en parlerai avec mon responsable.
Il m'a juste dit tu prend 2 ou 3 process et l'important c'est que dès qu'il en manque un process il faut envoyer une alerte dans le fichier alarme.log crée dans le script1.
Il n'y a pas de redirection vers alarme.log dans le script que tu m'a indiqué.
Serait ce à la fin de LIST=liste.dat | more que je dois rediriger vers alarme.log ??
[^] # Re: pour repondre a la question:
Posté par totof2000 . Évalué à 2.
En fait mon script affiche le résultat page par pagesur la sortie standard. Il te suffit donc de remplacer le |more par >>alarme.log.
La liste sera quant a elle sous la forme:
process_name nombre
Pour éviter qu'il exécute une commande de relance, supprime la ligne "system( ....)". Je te laisse reformatter la sortie à ta sauce. Je pense qu'avec ce que je t'ai donné tu devrais pouvoir te débrouiller. Si tu as d'autres questions n'hésite pas.
man ps pour voir à quoi correspondent les options utilisées pour ps. Sinon pour awk, je te conseille la lecture d'un bon bouquin sur le sujet (le bouquin O'Reilly sur sed et awk est particulièrement bien fait), la lecture des pages man ne t'aidera pas beaucoup si tu ne connais pas déjà un peu le sujet.
[^] # Re: pour repondre a la question:
Posté par juju75020 . Évalué à 1.
J'essaierai ça demain et jte dirai si ca marche ou pas.
Malheureusement :-) des questions je vais en avoir encore d'autre car mon tuteur en a plein à me donner !! sniff, lol
[^] # Re: pour repondre a la question:
Posté par liberforce (site web personnel) . Évalué à 2.
http://www.regit.org/article.php3?id_article=11
http://www.geocities.com/latompa/ha/apache_heartbeat.html
Bon, courage, pas toujours évident les stages, mais ne te démotive pas ;-)
[^] # Re: pour repondre a la question:
Posté par juju75020 . Évalué à 1.
Il ne marche pas.
si tu peux m'aider ?? Merci beaucoup.
J'ai d'abord crée un fichier de parametre appelé param comprenant ces process : bash 4
sshd 1
dtlogin 1
Ci dessous mon script :
#!/bin/bash
cat fichier_param | while read param
do
ps -A | grep `echo $param | awk '{print $1}'`
if test $? -eq 1
then
echo "`date "+%d/%m/%y"` Process manquant $param >>Alarme.log
fi
done
[^] # Re: pour repondre a la question:
Posté par liberforce (site web personnel) . Évalué à 2.
Ensuite, n'utilise pas grep, parce que si tu as les process tata et tatata tu n'arriveras pas à les différencier. Utilise plutôt pidof qui lui te retournera les PID des process que tu recherches (3 process => 3 PID).
Avec wc -w tu peux compter le nombre de process trouvés.
Et voilà, c'est fini. T'as du bol, j'avais qu'un truc urgentissime à faire ce soir... Fais chier, je dois y retourner...
#!/bin/bash
cat liste | while read process nb
do
echo "debug: Searching process: $process ($nb)"
nbfound=$(pidof $process | wc -w)
echo "debug: Found $nbfound time(s) $process"
if [[ $nbfound != $nb ]]
then
echo "`date "+%d/%m/%y"` Process '$process' missing (expected $nb, found $nbfound)" >> alarme.log
fi
done
PS:
la référence en cours de shell script:
http://www.tldp.org/LDP/abs/html/index.html (en)
http://www.bsdbooks.net/shells/scripting/fr/ (fr)
La version anglaise est la plus à jour
[^] # Re: pour repondre a la question:
Posté par juju75020 . Évalué à 1.
Le script que j'ai fait est-il modifiable ? C'est vrai que j'ai un peu de mal à tout comprendre. Et faire un script me prend beaucoup de temps. Si tu as la possibilité de m'aider sur mon script de depart ce serait sympa car il me renvoit les alertes sur alarme.log.
Merci d'avance.
en plus la pression de mon chef ca n'arrange pas.
[^] # Re: pour repondre a la question:
Posté par liberforce (site web personnel) . Évalué à 2.
Si en plus tu ne me dis pas ce qui foire, là pour le coup c'est impossible...
je te conseille un coup de bash -vx monscript.sh, ça lance un genre de mode debug pour les scripts shell... Tu vois ainsi ce que fait chaque ligne. Ensuite tente chaque ligne une par une pour voir laquelle foire. Ensuite je t'ai dit que ton script n'utilisait pas une solution viable, donc le modifier ne sert pas à grand chose si tu gardes la solution du grep...
De plus si tu avais essayé de comprendre mon script tu aurais vu que je renvoie aussi les alertes dans alarmes.log (oui, j'ai enlevé la majuscule). Après je me suis déjà fait ch*** à te faire un script qui fonctionne (testé sous cygwin), et je ne maitrise pas awk, donc je vais pas apprendre alors que ça sert à rien pour un script aussi simple. Je suis parti du script qui signale quand tu n'as pas le bon nombre de processus surveillés.
Alors ôte toi un peu les doigts du cul, tu verras que c'est pas difficile. Si tu as besoin d'aide pour comprendre les choses, pas de problème. Mais pour qu'on me dise "tu peux pas faire mon boulot à ma place et faire comme si c'était moi qui l'avais fait pour que mon maitre de stage s'en rende pas compte", faut peut être pas pousser...
[^] # Re: pour repondre a la question:
Posté par juju75020 . Évalué à 1.
Merci quand meme pour tes infos.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.