Bonjour,
Comme promis, je publie vu que ça rend service chez nous, sans poser de problème. Par contre, ça ne concerne que les TX pour l'instant.
Le script se compose de deux parties. Une partie côté client dans le rc.local des TXs qui ouvre et écoute un port, une partie côté serveur qui lance l'appel à l'heure choisie, via cron. Je ne suis pas sûr que ce soit top côté sécurité, mais vu qu'on est en local...
Le script lui-même, script_extinction_auto, est nommé à discrétion et lancé via CRON.
/opt/ltsp/i386/etc/rc.local
#!/bin/sh -e
/usr/bin/nohup /bin/nc -lp 454545 -c 'uname -n;halt;' &
exit 0
/usr/local/bin/script_extinction_auto
#!/bin/bash
######################################################################
## Script qui permet l'extinction automatisee des TXs pour Albiedu ##
## 08/12/09 - Mairie d'Albi. derniere maj: 06/10/10 ##
######################################################################
## La premiere partie du script est executee coté client, par le TX.
## Nous faisons donc en sorte qu'elle se lance automatiquement en placant dans
## /opt/ltsp/i386/etc/rc.local
## -- #!/bin/sh -e
## -- ## Fait partie du script d'extinction automatique des postes
## -- ## Lance netcat en ecoute sur le port 454545. En cas d'appel sur ce port,
## -- ## nc enverra son nom de machine qui lancera un halt
## -- ## nohup sert conservé le processusmalgre la fin du script.
## -- /usr/bin/nohup /bin/nc -lp 313131 -c 'uname -n;halt;' &
## -- exit 0
#######################################################################
##La seconde partie est lancee depuis le serveur.
## On commence par recuperer les IP des postes allumes via horizon-who,
## puis on lance l'appel netcat sur l'adresse concernee et on log la reponse,
## ainsi que les eventuels messages d'erreurs.
for x in /usr/bin/horizon-who |/usr/bin/cut -d " " -f 5 | /bin/sed -e "s/[()]//g" ; do /bin/nc -w 5 -q 2 $x 313131 2>&1 | /usr/bin/logger -p local0.info -t "EXTINCTION_AUTO" ; done
## Puis on nettoie tous les processus qui restent des utilisateurs (different de root) qui etaient eventuellement logges.
for x in <code>/usr/bin/horizon-who |/usr/bin/cut -d " " -f 1</code> ; do if [ $x != root ]; then /usr/bin/killall -u $x; fi; done
Si ça peut servir !
Je mettrai à jour au fur et à mesure s'il y a des modifications !