El Problema :
Hace poco mi amigo DanielX, me comento que estaba con un problemilla que no le daba solución en su proyecto de TerminalLinux. El tema era el siguiente:
Cuando esta en una máquina remota, y le decia apagar el sistema … el condenado comando apagaba la maquina principal. Obviamente esto representaba un gran lio. Imaginemos una aula con 30 PCs conectadas a un servidor de aplicaciones. Ahora alguien se le ocurre salir a comer y quiere apagar su maquina… y juaz !!! de repente tienes a una treintena de usuarios compresiblemente molestos porque se apagaron sus maquinas junto con todo el trabajo de la mañana.
La Solucion:
Bueno, la solución a esto parte de un comando bastante simple de linux: Los Alias.
Que son los alias ? Pues los alias son como sinonimos de comandos en linux. Por ejemplo, en mi sistema a mi me aburre mucho tener que tipear sudo aptitude search <paquete> para buscar algun paquete para mi sistema. Entonces defino un alias de esta manera: alias search=’sudo aptitude search ‘
Y listo, ahora cada vez que quiera buscar algun paquete en mi repositorio, lo unico que tengo q hacer es search <paquete>.
La solución para el problema inicial, tambien pasa por ahi. Definimos un alias llamado halt asi
alias halt = ‘/usr/local/halt’
Para que esto funcione ese alias debe estar siempre disponible, entonces agregamos esa linea a nuesto ~/.bashrc
Ese nuevo halt ( /usr/local/halt ) es un script raquitico en python.
#!/usr/bin/python
## halt remoto
##
## Autor: NeCuDeCo
##
from commands import getoutput
import re
aux = getoutput("echo $DISPLAY")
res = re.search("([a-z0-9A-Z\.]*).*",aux)
pc = res.group(1)
if pc == "": # Entonces es la maquina local
/sbin/halt
else: # es una maquina remota
print "apagamos la maquina remota"
print getoutput("ssh apagar@"+pc)
Con este script el sistema reconoce si se esta ejecutando desde el servidor principal o desde una maquina remota.
Ahora lo unico que faltaria seria crear un usuario apagar en la(s) maquina(s) remota(s) con los permisos adecuados y en lugar de un shell darle a ejecutar /sbin/halt
Nota: Espero q te sirva mi idea daniel, y suerte en el coneis !!! (Y)