Suspender servidores LTSP para reducir el consumo de energía y evitar un calentamiento innecesario | Algo de Linux

viernes, 23 de mayo de 2014

Suspender servidores LTSP para reducir el consumo de energía y evitar un calentamiento innecesario

Lo más habitual en los centros es encender los servidores LTSP de forma automática a primera hora y mantenerlos encendidos durante la mañana para evitar esperas cada vez que un profesor quiera iniciar sesión. El problema es que los servidores de terminales no van a estar en uso el 100% de la jornada y una parte del tiempo se encontrarán ociosos, consumiendo energía innecesariamente.

Para intentar reducir este consumo de energía y evitar que los equipos se calienten estando encendidos sin utilizarse, he preparado un script que, con una tarea cron, se ejecutará cada 15 minutos y comprobará si hay un usuario logueado en el entorno gráfico, de manera que:
  • Si hay un usuario en el entorno gráfico, no hará nada.
  • Si no hay ningún usuario, comprobará el tipo de aula: 
    • all: Aula con terminales y/o portátiles.
    • thinclients: Aula con terminales.
    • laptops: Aula con thinclients.
    • Si es un aula de terminales, ejecutará el script /usr/sbin/apagaterminales.sh que apaga los thinclients antes de suspender el servidor LTSP.
    • Suspenderá el servidor LTSP.
El código del script es muy sencillo, fundamentalmente porque utiliza otro script que ya tengo en el sistema para apagar los terminales (/usr/sbin/apagaterminales.sh) y aprovecha facter para comprobar el tipo de aula (En mi centro tengo definida una "variable" a la que he llamado clients en el fichero /etc/escuela2.0 para comprobar si el aula tiene thinclients o portátiles).

Para apagar los terminales utilizo pm-suspend, que se encuentra instalado en los servidores LTSP.
cat /usr/local/sbin/suspende.sh
#!/bin/bash
# Esteban M. Navas
# IES Valle del Jerte - Plasencia
# Fecha creación: 20/05/2014
# Fecha última modificación: 23/05/2014

# suspende.sh -> Apaga los terminales de un aula y suspende el equipo. Para apagar los terminales 
# utilizamos el script /usr/sbin/apagaterminales.sh y la herramienta pm-suspend que se encuentra instalada en los 
# servidores LTSP
#
# La idea es utilizar este script como tarea cron de forma que se ejecute cada cierto tiempo

# Si hay un usuario logueado en el terminal :0, no hacemos nada y finalizamos
if [ $(/usr/bin/w|/bin/grep ":0" | /usr/bin/cut -f1 -d" ") ]; then
   exit 0
fi

clientes=`facter clients`

# Si no hay un usuario logueado, apagamos los terminales
if [ $clientes = "all" ] || [ $clientes = "thinclients" ]; then
   /usr/sbin/apagaterminales.sh
fi

# Si no hay un usuario logueado en el terminal :0 suspendemos el equipo
/usr/sbin/pm-suspend &
La tarea cron que ejecuta el script es muy simple y se puede poner vía puppet:
cat /etc/cron.d/suspende

# Check every 15 minutes if no user logged and suspend
*/15 *    * * *    root    /usr/local/sbin/suspende.sh

He estado haciendo pruebas en un servidor y parece que todo funciona correctamente. Así que probaré en algún aula más y si todo va bien, pasaré la tarea para todos los servidores LTSP.

Tan sólo me he encontrado con un inconveniente: Por alguna razón, a la hora de reanudar el equipo, si queréis hacerlo pulsando el teclado, es necesario que éste se encuentre conectado mediante PS2. Mediante USB, por defecto, no funciona la reanudación. Supongo que habría que hacer pruebas y configurarlo, pero por no perder más tiempo y tener el sistema operativo lo antes posible, sobre todo ahora que comienza a hacer calor, he conectado todos los teclados de los servidores LTSP mediante PS2.
Publicado por primera vez en http://enavas.blogspot.com.es

No hay comentarios: