Cuando un usuario inicia sesión, a medida que va abriendo aplicaciones se van creando procesos y más procesos. Además, cuando inicia sesión en un thinclient, se crean archivos temporales en el directorio /tmp del servidor de terminales. Si todo va bien, cuando cierre la sesión, todos sus procesos se cerrarán, aunque es posible que los archivos del directorio /tmp permanezcan por si el usuario vuelve a iniciar sesión.
Pero, ¿qué sucede si el usuario apaga bruscamente el terminal desconectándolo de la corriente? ¿Y si el equipo se bloquea por algún motivo? En ese caso, lo más probable es que sus procesos queden abiertos en el servidor LTSP, creándonos casi seguro algún tipo de problema.
Para limpiar los procesos y los archivos temporales de un usuario que, en un momento determinado, no se encuentra activo en el sistema preparé el siguiente script que se ejecuta en el servidor de terminales:
#!/bin/bash
#
# Este script elimina los ficheros temporales de los usuarios que no están activos en el sistema
# Esteban M. Navas Martín
# 20/06/2013
# Obtenemos la lista de usuarios que han iniciado sesión en terminales
w | grep '192.168.0' > /tmp/userstoclean
# Para cada usuario que haya iniciado sesión en un terminal...
while read SESION ; do
USUARIO=`echo $SESION | cut -f1 -d" "`
IP=`echo $SESION | cut -f3 -d" "`
SESIONKO=`arp -i eth0 | grep 'incomplete' | grep $IP`
if [ ! -z "$SESIONKO" ]; then
# Borramos los temporales creados al iniciar sesión los usuarios en los terminales
find /tmp -not -user root -user $USUARIO -exec rm -r {} \; 2>/dev/null
# Matamos todos los procesos del usuario
pkill -9 -u $USUARIO
fi
done < /tmp/userstoclean
rm /tmp/userstoclean
Para que se ejecute de forma periódica cada cierto tiempo, no tenemos más que poner una tarea cron mediante puppet.
La idea de este script es examinar en la tabla ARP del servidor de terminales aquellas entradas que correspondan al interfaz que da servicio a los terminales, que en nuestro caso es eth0 y comprobar que en la entrada figura que la resolución IP - MAC está incompleta. Si no hay resolución y hay un usuario en el sistema que inició sesión en la red "192.168.0", podemos matar sus procesos porque el usuario no está logueado.
Dejo aquí el enlace del script, por si queréis descargarlo: cleantmpinactiveusers.
Publicado por primera vez en http://enavas.blogspot.com.es
0 comentarios:
Publicar un comentario