Aller au contenu

Vider le swap

Ce script permet de désactiver temporairement le swap d'une machine Linux afin de la remettre à zéro.
La variable $SEUIL permet de définir à quel pourcentage d'utilisation du swap le script le désactivera.
Il vérifiera ensuite si la machine dispose de suffisamment de mémoire vive pour accueillir le swap. Si c'est OK, on continue, sinon on arrête.
Un fichier de log sera généré dans le même répertoire que le script.

#!/bin/bash

# Chemin du fichier de log
LOG_FILE="swap_usage.log"

# Seuil d'utilisation du swap en pourcentage (multiplié par 10)
SEUIL=800

# Obtient l'utilisation actuelle du swap en pourcentage (arrondi à 1 décimale, multiplié par 10)
SWAP_USAGE=$(free | awk '/Swap/ {print int($3/$2 * 1000)}')

# Obtient la quantité de mémoire vive disponible en Mo
FREE_MEMORY=$(free -m | awk '/Mem/ {print $4}')

# Écrit un message dans le fichier de log et l'affiche à l'écran
log_message() {
    local message="$1"
    echo "$message"
    echo "$(date '+%Y-%m-%d %H:%M:%S'): $message" >> "$LOG_FILE"
}

# Crée le fichier de log s'il n'existe pas
if [ ! -f "$LOG_FILE" ]; then
    touch "$LOG_FILE"
fi

# Vérifie si l'utilisation du swap dépasse le seuil
if [ "$SWAP_USAGE" -gt "$SEUIL" ]; then
    log_message "L'utilisation du swap est supérieure à $((SEUIL / 10))%."

    # Vérifie si la mémoire vive disponible est suffisante
    if [ "$FREE_MEMORY" -gt 0 ]; then
        log_message "La mémoire vive disponible est suffisante ($FREE_MEMORY Mo). Désactivation du swap en cours..."
        # Désactive le swap
        swapoff -a
        # Réactive le swap
        swapon -a
        log_message "Le swap a été réinitialisé."
    else
        log_message "Attention : La mémoire vive disponible est insuffisante. Opération annulée."
    fi

else
    log_message "L'utilisation du swap est inférieure à $((SEUIL / 10))%."
fi