Re: ¿Cómo Haríais Esto? (Ejecución De Programas Al Iniciar El Sistema)
El caso real del que surge esto es:
Estamos desarrollando una aplicación que recoge información física de la máquina y de los accesos de los usuarios y la envía a una base de datos ubicada en nuestro servidor. Con ello controlamos cosas como qué máquinas necesitan ser actualizadas, quién se está quedando sin disco, qué máquinas no tienen suficientes recursos, cuando y desde dónde se conectan los usuarios, etc. etc.
Es necesario que el programa que colecciona los datos esté instalado en todas nuestras máquinas y en los perfiles de todos los usuarios existentes y futuros de la máquina.
Vale, he aquí la solución que he encontrado yo.
Nos valemos de la capacidad de
gambas de incorporar cualquier fichero que queramos a nuestros paquetes .deb.
Así, incorporamos al paquete de instalación
-una versión del fichero estándar /etc/skel/.profile que incluya una llamada a nuestro programa. (Este fichero es el que se copia al home de cada usuario cuando es creado)
-un shell script, llamado addprofile.sh, por ejemplo, que añada dicha referencia a los .profiles de todos los usuarios ya existentes, si es que no la tienen ya, y que colocamos en /etc/init.d
-un enlace a dicho shell script que colocamos en /etc/rc3.d (debe empezar por "S" seguido de un número con el orden de ejecución en el nivel de arranque. Mejor un número alto, para que se ejecute cuanto todo esté prácticamente montado y hecho S93addprofile o algo así)
Todo esto es posible porque la instalación del .deb se hace con permisos de root, y la copia de los ficheros también. En el siguiente arranque de la máquina, el .profile ya será grabado en todos los home de los usuarios y lanzará el programa cada vez que se inicie el sistema.
Sabiendo que la llamada al programa es "/usr/bin/colector", el shell script es este:
#!/bin/bash
for usuario in /home/*
do
cat $usuario/.profile|grep colector >/tmp/tiene
if [ -s /tmp/tiene ]; then
rm /tmp/tiene
#echo "$usuario SI tiene"
else
echo "/usr/bin/colector" >> $usuario/.profile
#echo "$usuario NO tenía. Ahora Sí"
fi
done
Aún no lo he implementado de verdad y tengo mis dudas de que funcione en todos los casos, pero hasta donde lo he probado, funciona. Eso sí, en derivados de Debian, que ignoro si otros sistemas basan su configuración de usuaro en /etc/skel, etc. Aunque supongo que se podrá adaptar fácilmente.