Quand on administre des serveurs, il peut être utile de déclencher automatiquement certaines actions si la charge devient trop élevée : redémarrer un service, ajouter une règle de firewall, tuer un processus, envoyer une alerte, etc. Le problème de beaucoup de scripts shell qui font ça, c’est que si la charge redescend lentement après l’action, le script risque de recommencer à tuer des processus ou à redémarrer des services. Et ça peut finir par provoquer une interruption de service.
La solution consiste à relever deux fois la charge avant de lancer vos commandes.
Place au code :
#!/bin/sh
tsleep=2 # time to wait before 2 checks
llimit=8 # load limit before action
alert=monitor@christophe-casalegno.com #put your monitor alert email here
host=`hostname -f`
load=`cat /proc/loadavg |awk {'print $1'}|cut -d "." -f1` # The load average now
sleep $tsleep
load2=`cat /proc/loadavg |awk {'print $1'}|cut -d "." -f1` # The load average after tsleep
if test "$load" -ge $llimit
then
if test "$load2" -ge $load
then
date=`date`
echo "The Load Average has reached $load1 and $load2 on $host" | mail -s "$host : High Load Average Alert" $alert
echo "$date : The Load Average has reached $load1 and $load2 on $host" >> /var/log/loadavg.log
else
echo "ok" 1>&2
fi
else
sleep 1
fi
Il ne vous reste plus qu’à mettre ce script dans votre crontab, toutes les minutes par exemple, et à souhaiter une bonne nuit à votre serveur ;). Vous pouvez aussi télécharger directement le script ici : http://127.0.0.1:8767/tools/loadcheck.sh
Christophe Casalegno
Vous pouvez me suivre sur : Twitter | Facebook | Linkedin | Telegram | Youtube
1 commentaire