Si può costruire un semplice script bash, basta fornirgli le giuste variabili;
come prima variabile abbiamo bisogno di leggere la temperatura del processore da sensors.
Per me basta un
che reindirizza l'output di sensors su sed, prendendone solo la 12 riga, che viene a sua volta reindirizzata a cut che ne prende solo i caratteri 16 e 17.
Partendo da questo semplice comando è facile capire come adattarlo al proprio output di sensors, quindi variare riga e caratteri in base ai dati che si vuole dare in pasto allo script.
La seconda variabile da impostare sarà la temperatura alla quale il PC dovrà spegnersi automaticamente, per me è 85°C.
Con un while true avvio in loop infinito un ciclo if che confronta ogni n secondi, per me 30 (sleep 30), la temperatura del processore con quella di spegnimento che ho impostato, e, quando è uguale o superiore (if [ $VAR1 -ge $VAR2 ]), manderà un xmessage di spegnimento e avvierà uno shutdown che avverrà dopo 2 minuti (shutdown è avviabile da super user, quindi bisogna fornire la propria password allo script); quando la temperatura è inferiore la stamperà a schermo.
Questo è lo script completo:
Codice: Seleziona tutto
#!/bin/bash
temp=`sensors | sed -n '12{p;q}' | cut -c16-17`
maxtemp=85
while true
do
if [ $temp -ge $maxtemp ];
then
xmessage "Alert! Temp above 85. System halting in 2 minutes"
echo password | sudo /sbin/shutdown -h +2
else
sensors | sed -n '12{p;q}' | cut -c16-17
fi
sleep 30
done
Questa è la via più semplice che ho trovato, ma si potrebbe migliorare tantissimo, per esempio inserendo lo script nell'init, così da avviarlo automaticamente e senza il bisogno di avere la password in chiaro in uno script; oppure se si hanno più processori si potrebbero controllare entrambi; o ancora, prima di effettuare lo shutdown si potrebbe effettuare un altro controllo per verificare che la temperatura non sia scesa sotto la soglia; o identificare il processo che consuma più CPU e killarlo automaticamente.
Invito gli utenti a continuare le modifiche dello script, scrivendole in questa discussione.