Ce guide explique comment automatiser proprement l’arrêt, la pause électrique et le redémarrage (via Wake-on-LAN) d’un serveur distant. Cette méthode est idéale pour réinitialiser des contrôleurs matériels (USB, disques) ou économiser de l’énergie.
Le petit mot de BlablaLinux : Dans mon propre labo, j’utilise ce script pour piloter mon serveur Ubuntu Server qui fait tourner Nextcloud. C’est mon nœud Proxmox (Debian) principal qui envoie les commandes. Ça me permet d’être sûr que mes disques de sauvegarde USB sont bien réinitialisés électriquement chaque semaine !
ethtool <NOM_INTERFACE>. La ligne Wake-on: g doit être présente.ip link).Installez l’utilitaire de réveil (en tant que root) :
apt update && apt install wakeonlan -y
Pour que l’automate puisse agir sans intervention, il faut configurer l’accès et les permissions. Attention à bien remplacer les éléments entre crochets.
Générez une clé sur votre machine de contrôle (sans passphrase) et envoyez-la sur le serveur cible :
ssh-keygen -t ed25519
ssh-copy-id <VOTRE_UTILISATEUR>@<IP_DU_SERVEUR>
Sur le serveur à piloter, l’utilisateur doit pouvoir éteindre la machine sans saisir de mot de passe.
sudo visudo<VOTRE_UTILISATEUR> par le nom de votre compte (ex: any ou admin) :<VOTRE_UTILISATEUR> ALL=(ALL) NOPASSWD: /sbin/poweroff, /usr/sbin/poweroff
Le script suit une logique de sécurité en 5 étapes :
#!/bin/bash
# Script de cycle électrique intelligent (BlablaLinux)
# --- CONFIGURATION À PERSONNALISER ---
TARGET_IP="<IP_DU_SERVEUR_CIBLE>"
TARGET_MAC="<MAC_DU_SERVEUR_CIBLE>"
TARGET_USER="<VOTRE_UTILISATEUR_SSH>"
USE_GOTIFY="true"
GOTIFY_URL="https://<VOTRE_URL_GOTIFY>"
GOTIFY_TOKEN="<VOTRE_TOKEN_APPLICATION>"
# --- FONCTION DE NOTIFICATION ---
send_notification() {
local title="$1"
local message="$2"
local priority="$3"
if [ "$USE_GOTIFY" = "true" ]; then
curl -k -s -X POST "$GOTIFY_URL/message?token=$GOTIFY_TOKEN" \
-F "title=$title" -F "message=$message" -F "priority=$priority" > /dev/null 2>&1
else
echo "[$title] $message (Priorité: $priority)"
fi
}
# 1. Extinction propre via SSH
echo "Envoi de l'ordre d'extinction à $TARGET_IP..."
ssh $TARGET_USER@$TARGET_IP "sudo /sbin/poweroff"
# 2. Attente de l'extinction réelle (boucle ping)
echo "Attente de l'arrêt du réseau..."
while ping -c 1 -W 1 $TARGET_IP > /dev/null; do
sleep 5
done
# 3. Pause de sécurité électrique (90s)
echo "Serveur éteint. Pause électrique de 90s..."
sleep 90
# 4. Réveil via Wake-on-LAN
/usr/bin/wakeonlan $TARGET_MAC
# 5. Surveillance du redémarrage (timeout 10 min)
echo "Attente du redémarrage..."
MAX_RETRIES=60
COUNT=0
while ! ping -c 1 -W 1 $TARGET_IP > /dev/null; do
if [ $COUNT -ge $MAX_RETRIES ]; then
send_notification "🚨 ERREUR : $TARGET_IP" "Le serveur n'a pas redémarré après 10 minutes !" "10"
exit 1
fi
sleep 10
COUNT=$((COUNT + 1))
done
send_notification "✅ Succès : $TARGET_IP" "Le cycle électrique est terminé. Serveur en ligne." "5"
Avant d’automatiser, lancez le script manuellement pour valider la configuration (SSH, Sudoers et Wake-on-LAN).
Depuis votre machine pilote (ex: Proxmox), exécutez le script :
/bin/bash /root/scripts/cycle-nextcloud.sh
Si vous avez configuré la redirection vers un fichier (voir étape 6), vous pouvez suivre l’avancement en temps réel :
tail -f /var/log/nc-cycle.log
Voici les points critiques à modifier pour que le système fonctionne chez vous :
| Élément | Où le modifier ? | Description |
|---|---|---|
| Utilisateur | Étape 2 (B) et Script | Le nom d’utilisateur qui possède la clé SSH. |
| IP cible | Étape 2 (A) et Script | L’adresse IP locale du serveur à éteindre. |
| Adresse MAC | Script (TARGET_MAC) | L’identifiant physique de la carte réseau. |
| Gotify | Script (URL/TOKEN) | Vos identifiants Gotify pour recevoir l’alerte sur smartphone. |
Pour lancer ce cycle automatiquement (par exemple, tous les lundis à 04h00), ajoutez cette ligne au crontab de l’utilisateur root (crontab -e) de votre machine pilote :
0 4 * * 1 /bin/bash /root/scripts/cycle-nextcloud.sh >> /var/log/nc-cycle.log 2>&1
Contrairement à une coupure brutale via une prise connectée, ce script assure une extinction logicielle propre. Cela protège l’intégrité de vos bases de données et de vos systèmes de fichiers tout en garantissant une réinitialisation matérielle complète.
Auteur : ce guide est proposé par Amaury aka BlablaLinux. Retrouvez l’ensemble de mes services sur blablalinux.be/mes-services-publics/.