Script monitoraggio temperatura HardDisk e spegnimento PC oltre soglia limite

Riconoscimento, installazione e configurazione delle periferiche.
Avatar utente
bingel
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4026
Iscrizione: lunedì 3 aprile 2006, 10:17

Script monitoraggio temperatura HardDisk e spegnimento PC oltre soglia limite

Messaggio da bingel »

Con i primi caldi si presenta puntuale il problema del surriscaldamento dei dischi fissi.
Esistono già programmi come gkrellm e simili che vengono utilizzati per monitorare la temperatura del disco fisso e avvisare, tramite un allarme, quando questa supera una certa soglia.
E' necessario però che tali programmi restino attivi (credo) durante tutta la sessione di lavoro oltre che essere avviati manualmente dall'utente e inoltre funzionano solo in ambiente grafico.
Dal canto mio quindi, ho preferito elaborare, avvalendomi, tra le varie cose, di uno script trovato su internet e modificato a mio piacimento, un piccolo sistema per monitorare la temperatura del disco fisso nonché avvisare l'utente e spegnere il PC qualora questa superasse una certa soglia predefinita.

Lo script è il seguente:

Codice: Seleziona tutto

#!/bin/bash

temperatura=`sudo hddtemp /dev/sda | awk '{ print $4}' | awk -F '°' '{ print $1}'`;

if [ $temperatura -ge 45 ];

then

sudo shutdown -h 3 "La temperatura del disco fisso ha raggiunto la soglia limite di 45°C. Salvare i dati correnti e chiudere tutte le applicazioni attive." &

zenity --warning --title "ATTENZIONE !" --text "La temperatura del disco fisso ha raggiunto la soglia limite di 45 gradi C. Per evitare danni, il PC si spegnera' automaticamente entro 3 minuti. Salvare i dati correnti e chiudere tutte le applicazioni attive." &

fi

exit 0
e va inserito nel crontab di root facendo in modo che venga eseguito ogni tot minuti (nel mio caso ogni 5).

Tale script controlla la temperatura del disco e se questa supera i 45 gradi arresta il PC avvisando tramite un messaggio pop-up (se ci si trova in ambiente grafico X) dell'imminente spegnimento (che avverrà entro 3 minuti) oltre che attraverso un messaggio di testo per la console a caratteri (nel caso l'utente si trovasse ad operare al di fuori dell'ambiente grafico).

Per fare ciò si avvale dei seguenti tools: il programmino "hddtemp" (da installare con apt-get), il comando "shutdown" e il programma "zenity" (da installare con apt-get) che permette di visualizzare messaggi d'allerta o d'errore attraverso finestrelle pop-up.

Lo scoglio più grosso è stato quello di riuscire a far funzionare zenity in quanto cron necessita di alcuni accorgimenti affinché possa riuscire a far partire le applicazioni grafiche ed anche perché zenity, quando viene avviato tramite cron, diventa davvero capricciosissimo (apparentemente sembra inspiegabile ma se avviato da cron non vuole lettere accentate né caratteri particolari, cosa che non accade invece se viene utilizzato normalmente).

Per rimuovere tale scoglio ho operato come segue: innanzitutto il messaggio d'allerta è stato ripulito da tutti i caratteri che ne impedivano l'esecuzione (vedi lo script più sopra) quindi è stato necessario fare in modo che a tutti gli utenti locali (root compreso) fosse garantita la connessione al server X tramite il seguente comando:

Codice: Seleziona tutto

xhost +local:
da inserire in uno script che a sua volta ho dovuto posizionare nella directory "/etc/profile.d" affinché venisse eseguito per ogni utente all'avvio del sistema.

Fatto ciò è stato necessario mettere in testa al file "crontab" dell'utente root (ovvero dove avremo messo anche il comando per l'esecuzione, ad un intervallo di 5 minuti, dello script di monitoraggio) la seguente linea:

Codice: Seleziona tutto

DISPLAY=:0.0
che specifica su quale display (in questo caso il display 0 ovvero il primo ed unico) devono essere avviate le applicazioni grafiche (nel nostro caso zenity).

Per sapere qual'è il vostro display (normalmente se avete un solo monitor dovrebbe essere il display :0.0) digitate questo comando in una finestra di terminale:

Codice: Seleziona tutto

echo $DISPLAY
Per editare il crontab di root è necessario digitare quanto segue:

Codice: Seleziona tutto

sudo crontab -e
Di seguito il mio crontab:

Codice: Seleziona tutto

# m h  dom mon dow   command
DISPLAY=:0.0
*/5 * * * * /home/bingel/Script/tempmax.sh
dove tempmax.sh è lo script di monitoraggio.

NOTA BENE:
Lo script misura la temperatura del solo disco /dev/sda. Nel caso nel PC fossero installati più dischi, sarà necessario modificarlo affinché possa misurare la temperatura di tutti e ovviamente se a superare la soglia limite fosse il disco dove non è installato il sistema operativo, piuttosto che spegnere il sistema sarà sufficiente metterlo in standby attraverso il comando "hdparm". In allegato un file d'esempio che non ho tuttavia testato.

Purtroppo non è possibile monitorare la temperatura dei dischi fissi esterni (forse con il tool smartctl ci si potrebbe anche riuscire ma non è detto che funzioni con tutte le periferiche). Una cosa però la si può comunque fare ovvero cercare di ottenere che anche questi dischi vengano spenti qualora il PC dovesse essere arrestato (altrimenti, al contrario del PC e dei dischi interni, questi rimarrebbero accesi).
Per farlo ci si può avvalere dell'utilità hd-idle.
Vedi questo post per come installarla e configurarla: http://forum.ubuntu-it.org/viewtopic.php?p=2078662#p2078662
hd-idle può essere utilizzato al posto di hdparm anche per mettere in standby tutti i dischi interni oltre che quelli esterni.
Allegati
tempmax.sh.txt
(2.2 KiB) Scaricato 71 volte
Ultima modifica di bingel il lunedì 18 maggio 2009, 13:42, modificato 1 volta in totale.
Free Thought - Free World
jerico
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 19127
Iscrizione: lunedì 21 luglio 2008, 23:43
Desktop: Gnome
Distribuzione: Archlinux

Re: Script monitoraggio temperatura HardDisk e spegnimento PC oltre soglia limite

Messaggio da jerico »

Complimenti per il lavoro! ;)
Scrivi risposta

Ritorna a “Driver e periferiche”

Chi c’è in linea

Visualizzano questa sezione: nick091 e 6 ospiti