Arrêter / redémarrer un serveur linux sans intervention avec rtcwake

Je suis un p’tit flemmard… Entendre par là que l’heure du dodo venue, je n’ai pas envie de traverser l’appartement pour éteindre mon serveur (il fait nuit, tout le monde dort et personne n’a pas besoin d’y accéder). Sur l’année, cela ne va pas me faire économiser des kWs, c’est sur, mais c’est toujours ça d’économisé.

J’ai donc développé un petit script qui utilise rtcwake (consulter le man rtcwake). Celui-ci est lancé régulièrement (dès lors que je suis dans une plage horaire d’extinction) par un crontab afin d’identifier si le serveur est le dernier équipement éveillé et qui reconfigure le serveur pour démarrer tout seul à l’heure indiquée.

Prérequis

Avant de partir tête baissée, il y a deux choses à faire:

  • Avoir un bios compatible avec l’option RTC
  • Récupérer rtcwake si vous ne l’avez pas déjà

Rtcwake

Rtcwake ne peut être utilisé qu’en mode root (ou alors il faut donner gérer les droits différemment).
Rtcwake propose plusieurs modes:

  • standby – permet de redémarrer rapidement. C’est un mode de veille qui offre peu de réduction énergétique.
  • mem – met les données en RAM. Cela permet un redémarrage rapide tout en diminuant la consommation car seul la RAM restera alimentée.
  • disk – Les données sont inscrites sur le disque dur et elles seront restaurées lors de la remise sous tension. L’alimentation électrique est coupée.
  • off – Stop l’ordinateur (équivalent du bouton arrêt).
  • no – Permet simplement de définir l’heure de réveil sans forcer un arrêt.

Pour mon installation, seul l’option disk est pleinement fonctionnelle.

D’autres part, la gestion de l’horloge materielle peut être un peu délicate (jeter un coup d’œil au man hwclock pour avoir plus d’infos). Pour notre cas, nous utiliserons l’option –auto, mais suivant votre configuration (et vos besoins) les options –local ou –utc pourront être utilisées suivant les cas où l’horloge matérielle est en horaire local ou UTC.

Le script

J’ai créé le script stopsrv.sh, que je place dans /usr/sbin avec les droits d’écriture (vous pouvez le placer où vous le souhaitez, pensez à changer l’adresse dans le fichier crontab)

L’ajout au crontab

On ajoute les commandes au crontab.
Je n’ai pas identifié de solution permettant de faire ceci en une seule ligne. Le passage de minuit pose soucis.

Tel que le contrab est configuré:
-Si aucune adresse ip indiquée dans le script est trouvée à 20h, le serveur va s’éteindre de lui-même pour se relancer le lendemain.
-Tant qu’une adresse IP est trouvée, on refait un essai toutes les 10min et ce jusqu’à 5h du matin.

PS: Soyez malin, éviter de mettre une heure de réveil (wakeTime dans le script) qui est dans la plage d’extinction du fichier crontab.

Evolution

J’ai amélioré le script pour mieux prendre en compte les redémarrages au lendemain. Initialement, je faisais une chose basique. Si le script était exécuté après midi, il devait redémarré le lendemain… C’était du provisoire, et j’ai corrigé le tout.
Pour cela je regarde si la date de réveil est antérieur ou postérieur à la date actuelle. J’utilise la fonction date pour convertir ces informations en secondes et ainsi pouvoir les comparer simplement.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

www.000webhost.com