Voici un script Bash qui vérifie la charge CPU et redémarre le service HAProxy si la charge dépasse 85 % au moins 2 fois. Le script stocke les occurrences dans un fichier temporaire.
#!/bin/bash
# Chemin du fichier temporaire pour stocker les occurrences
temp_file="/tmp/load_high_count"
log_file="/var/log/check_cpu_load.log"
# Limite du load average sur 1 minute
load_threshold=1.5
# Vérifie si le fichier temporaire existe, sinon le créer avec une valeur initiale de 0
if [ ! -f "$temp_file" ]; then
echo 0 > "$temp_file"
fi
# Vérifie si le fichier de log existe, sinon le créer
touch "$log_file"
# Fonction pour obtenir le load average sur 1 minute
get_load_average() {
awk '{print $1}' /proc/loadavg
}
# Obtenir le load average actuel sur 1 minute
load_average=$(get_load_average)
# Vérifie si le load average dépasse le seuil
if (( $(echo "$load_average > $load_threshold" | bc -l) )); then
# Incrémenter le compteur
echo $(( $(cat "$temp_file") + 1 )) > "$temp_file"
else
# Réinitialiser le compteur si le load average est en dessous du seuil
echo 0 > "$temp_file"
fi
# Lire le compteur actuel
count=$(cat "$temp_file")
# Si le compteur atteint 1 ou plus, redémarrer HAProxy, logguer la date et réinitialiser le compteur
if [ "$count" -gt 1 ]; then
systemctl restart haproxy.service
echo "$(date): HAProxy restarted due to high load average ($load_average)" >> "$log_file"
echo 0 > "$temp_file"
fi
Créez un fichier nommé /etc/systemd/system/cpu-monitor.service
avec le contenu suivant :
[Unit]
Description=Monitor CPU load and restart HAProxy if needed
Wants=cpu-monitor.timer
[Service]
Type=simple
ExecStart=/usr/local/bin/check_cpu_load.sh
Remplacez /path/to/your/script.sh
par le chemin réel vers votre script.
Créez un fichier nommé /etc/systemd/system/cpu-monitor.timer
avec le contenu suivant :
[Unit]
Description=Run CPU monitoring script every minute
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
Unit=cpu-monitor.service
[Install]
WantedBy=timers.target
-
Rechargez les fichiers systemd :
systemctl daemon-reload
-
Activez et démarrez le timer :
systemctl enable cpu-monitor.timer systemctl start cpu-monitor.timer
Le script sera exécuté toutes les minutes. Si la charge CPU dépasse 85 % au moins 2 fois, HAProxy sera redémarré automatiquement.