Files
docudjeex/content/5.betises/2.bash/4.hotdisk.md
2025-10-05 17:01:38 +00:00

3.5 KiB
Raw Blame History

navigation, title, main
navigation title main
true HotDisk
fluid
false

:ellipsis{left=0px width=40rem top=10rem blur=140px}

HotDisk


Quand on a un NAS avec plusieurs disques dans une buanderie, les températures peuvent vite grimper. Or, un disque dur est très sensible aux températures et peut subir de gros dommages s'il dépasse une température seuil pendant un certain temps. Après un été très chaud qui a fournit son lot de sueur froide en regardant la température de mes disques, j'ai cherché un moyen de pouvoir automatiser l'extinction du serveur en cas de dépassement prolonger de la température maximale supportée par mes disques.

N'ayant rien trouvé de convaincant, je l'ai donc fait moi-même.

  • Le script lit la température SMART de tous les disques SATA chaque minute.
  • Il compte le nombre de minutes consécutives où la température est au-dessus ou en dessous du seuil.
  • Il envoie des notifications Discord si le seuil est dépassé ou si la température redescend.
  • Il déclenche larrêt du système si la température dépasse la limite pendant la durée configurée.
  • Il enregistre toutes les températures et létat des compteurs, et effectue automatiquement la rotation des journaux.

Puis tant qu'on y est, j'ai ajouté un script d'installation qui installe le script, le rend éxecutable, crée un service systemd et un timer systemd et l'active. Le script d'installation permet aussi de régler les différentes variables:

Variable Description Valeur par défaut
MAX_TEMP Température maximale autorisée (°C) avant le début du compte à rebours darrêt 60
HOT_DURATION Minutes consécutives au-dessus de MAX_TEMP avant larrêt du système 5
COOL_RESET_DURATION Minutes consécutives en dessous de MAX_TEMP pour réinitialiser les compteurs 5
LOG_FILE Chemin du fichier journal principal /var/log/hdd_temp_monitor.log
LOG_ROTATE_COUNT Nombre de fichiers journaux à conserver 7
LOG_ROTATE_PERIOD Période de rotation des journaux (daily ou weekly) daily
DISCORD_WEBHOOK URL du webhook Discord pour les notifications Obligatoire

Il execute aussi un autre script qui paramètre le logrotate avec les éléments configurés prédédemment. Et enfin, le script d'installation peut etre executé via un simple curl + execution d'un dernier script pour les plus flemmard.

Il a fallu également gérer le sujet du root sans sudo, du sudo seul, de l'utilisateur sans sudo, les divers cas d'erreur (dépendances manquantes, erreur dans les permissions, créations de fichier, de lecture des données des disques, etc...)

Et l'acces concurrent au fichier de statuts.

Plus d'infos directement sur le repo :

::card #title 📜 HotDisk #description Gardez vos disques au frais ! ::