Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/01/2008, à 14:58

thurston

[RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Bonjour,

J'ai un PC (sous Ubuntu) qui me sert de serveur de fichiers pour les autres PCs clients qui lui sont connectés. Lorsque 'un PC client est mis en route, le serveur de fichiers est automatiquement lancé par wake on lan. Ainsi pour la mise en route pas de problème. Par contre pour ce qui est de l'éteindre c'est un autre souci!!! En effet, comme je n'arrive pas à  reveiller le serveur quand celui ci est en veille par le wake on lan, je pense à  une autre stratégie:

Est ce quelqu'un connaitrait le script pour que le serveur
1. détecte automatiquement que plus un seul client n'est présent sur le reseau local
2. se ferme (shutdown) donc après une tempo disons de 10min par exemple.
Je suis un grand débutant (15 ans de windows derrière), aussi, si vous avez la solution, allez y dou...cement. Merci d'avance
Amitiés
Thurston

Dernière modification par thurston (Le 03/01/2008, à 18:37)

Hors ligne

#2 Le 03/01/2008, à 15:23

mekare

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Je pense que le couple crontab + script (avec un netstat) sont fait pour toi :

en CSH :

#!/bin/csh
set nbclients=`netstat -lataupe |grep ESTABLISHED |grep -v localhost|wc -l`
if ( "$nbclients" == "0" ) then
 poweroff
endif

Note : Faudrait vraiment que je passe à  bash hmm

Dernière modification par mekare (Le 03/01/2008, à 15:23)

Hors ligne

#3 Le 03/01/2008, à 15:58

thurston

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Salut mekare,

Impressionnant, rapidité et efficacité.
Avant d'y poster un RESOLU, juste une question:
J'ai bien sûr ma freebox toujours présente, donc Nbclients-mini=1. Je peux ainsi décreter que si Nbclients=1 j'éteins. Ne serait ce pas plus judicieux d'éliminer tout le temps 192.168.0.25.4 dans mon cas de la liste des ip du réseau local?
Euh...Comment on fait, si l'idée te semble ok, (sinon Nmini=1, en considérant que la freebox est toujours là )???

A noter que j'ai un petit souci avec le fait que j'avais fait des automount sur les disques du serveur, et qu'après un certain temps, il sont automatiquement démontés, et donc mon pc client n'est plus pris en compte, alors qu'il est bien connecté au réseau local. Une solution possible reste a garder les montages actifs sans jamais les auto dé- monter. Y a t il une autre solution?

Sinon, pour ce qui est de ma tempo, est ce que je dois executer ce script toutes les 10 mins à  l'aide de crontab, c'est çà ?

Et pour finir, j'ai installé csh qui ne l'était pas sur mon serveur. Pourquoi serait ce mieux en bash qu'en csh, pas bien compris...
Attention super novice /débutant, même si ferme intention de dire adieu à  Winworld sur tous mes PCs.
En tous les cas merci à  toi mekare
Thurston

Dernière modification par thurston (Le 03/01/2008, à 16:22)

Hors ligne

#4 Le 03/01/2008, à 16:35

mekare

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

thurston a écrit :

J'ai bien sûr ma freebox toujours présente, donc Nbclients-mini=1. Je peux ainsi décreter que si Nbclients=1 j'éteins. Ne serait ce pas plus judicieux d'éliminer tout le temps 192.168.0.25.4 dans mon cas de la liste des ip du réseau local?
Euh...Comment on fait, si l'idée te semble ok, (sinon Nmini=1, en considérant que la freebox est toujours là )???

set nbclients=`netstat -lataupe |grep ESTABLISHED |grep -v localhost|grep -v 192.168.0.254|wc -l`

thurston a écrit :

Sinon, pour ce qui est de ma tempo, est ce que je dois executer ce script toutes les 10 mins à  l'aide de crontab, c'est çà ?

En le déclarant dans la crontab, le script sera lancé toutes les 10 minutes, pour faire une tempo c'est un peu plus compiqué, mais faisable.

thurston a écrit :

Et pour finir, j'ai installé csh qui ne l'était pas sur mon serveur. Pourquoi serait ce mieux en bash qu'en csh, pas bien compris...

C'est juste que je connais csh et pas bash, après question de goût. Ah si tout de même bash est présent par défaut dans les distrib et son développement est je pense plus intense que csh (qui est vieux).

Et pour résumer, avec une tempo de 10 minutes (à  planifier toutes les 11 minutes mini dans la crontab) :

#!/bin/csh
# On vérifie le nombre de client
set nbclients=`netstat -lataupe |grep ESTABLISHED |grep -v localhost|grep -v 192.168.0.254|wc -l`
if ( "$nbclients" == "0" ) then
 # Si il n'y en a aucun, on temporise 10 minutes
 sleep 600
 # Après 10 minutes on vérifie s'il n'y a toujours pas de client et on éteint si c'est le cas (sinon le script se termine)
 set nbclients=`netstat -lataupe |grep ESTABLISHED |grep -v localhost|grep -v 192.168.0.254|wc -l`
 if ( "$nbclients" == "0" ) then
  poweroff
 endif
endif

Hors ligne

#5 Le 03/01/2008, à 18:36

thurston

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Salut mekare,

Tout marche nickel!!. Franchement merci, car je me suis pris la tête avec le wake on lan qui ne voulait pas réveiller mon serveur que je voulais en veille si inactivité. La solution ici me permet d'arreter le serveur quand il le faut, et le wakeonlan me permet de le redemarrer quand un client se connecte. j'avais ecrit des sottises sur la freebox, aussi je resume.

Le but: un PC de type serveur de fichier, sur un réseau local, qui est mis en route par wake on lan à  la mise en route de chaque PC client qui lui est connecté, doit pouvoir se couper lorsque aucun client ne lui est connecté (économie d'énergie et durée de vie des disques dur).

Le préalable: Lorsqu'un PC client est connecté au serveur, et qu'un disque serveur est monté sur le client, l'option timeout d'autofs par exemple ne doit pas être utilisée, car elle conduirait le serveur dans l'erreur en lui faisant croire qu'un client inactif depuis plus que le timeout n'est plus présent sur le réseau local, ce qui serait faux.

Les autres voies exploitées sans résultat: J'avais essayé de mettre le serveur en veille (mode S3) très économe, mais, même si le wakeonlan fonctionne parfaitement sur le serveur quand celui ci est éteint, il semble impossible de réveiller le serveur (veille) par wake on lan. J'ai donc choisi une autre voie.

1. sudo gedit
Code:

#!/bin/csh
set nbclients=`netstat -lataupe |grep ESTABLISHED |grep -v localhost|wc -l`
if ( "$nbclients" == "0" ) then
sudo /sbin/shutdown -h now
endif

2. si csh est non installé

sudo apt-get install csh

3. sauvegarder ce script dans /etc/cron.daily/stopifnoconnection (j'ai nommé le script stopifnoconnection)

4.le rendre executable

sudo chmod +x /etc/cron.daily/stopifnoconnection

5. pour tester que le script fonctionne, initier en premier la commande

sudo netstat -lataupe |grep ESTABLISHED |grep -v localhost|wc -l

et en activant/desactivant des connections internet par exemple (firefox) ou en déconnectant des clients, faire passer le nombre de connections de >1 à  0, tout en relancant le script (notez que la freebox n'a pas de connection active sur le serveur).

/etc/cron.daily/stopifnoconnection

Lorsque la commande donne 0, le PC doit se couper. (on peut s'aider de netstat -lataupe seulement pour identifier les connections ESTABLISHED

6. une fois le script validé, il suffit de l'integrer à  cron pour automatiser son lancement avec

sudo crontab -e

en spécifiant le temps de surveillance de client connecté ou non (ici 30 min). ca donne (ligne dans crontab

* /30 * * * * /etc/cron.daily/stopifnoconnection

Merci à  mekare pour son aide aussi rapide qu'efficace. (j'ai preféré utiliser shutdown plutot que poweroff plus facile à  lancer dans le cron (droits?)).
Amitiés
Thurston

Hors ligne

#6 Le 03/01/2008, à 18:42

freebird

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

L'équivalent en bash pour vous éviter l'installation de csh :

#!/bin/bash
# On vérifie le nombre de client
nbclients=`netstat -lataupe |grep ESTABLISHED |grep -v localhost|grep -v 192.168.0.254|wc -l`
if [ $nbclients -eq 0 ]; then
  sudo /sbin/shutdown -h now
fi

Dernière modification par freebird (Le 03/01/2008, à 18:44)

Hors ligne

#7 Le 03/01/2008, à 23:37

thurston

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Merci à  freebird pour son post, qui cloture le sujet en se rapprochant de l'optimum.
Je laisse la version csh, sachant que la version de freebird est sans doute la meilleure.
Amitiés
Thurston

Hors ligne

#8 Le 06/01/2008, à 12:33

thurston

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Bonjour,

J'ai finalement crée un nouveau script en bash, qui tient compte d'une fenetre de 9mins toutes les 10mins pour décreter que le PC est inactif. Tous les commentaires sont dans le script. Les commentaires ci dessus sont toujours valides.
Ah j'oubliais: j'ai pris pour habitude d'indiquer dans les commentaires les différentes manipulations et locations des fichiers, ce que je trouve assez pratique..ainsi un mini how-to est relié au fichier, il ne reste plus qu'à  jouer de la souris et de son editeur préféré pour le rendre fonctionnel.

#!/bin/bash

# stopifnoconnection

# This script intends to shutdown PC if no connection is ESTABLISHED to this PC.
# It is useful in case of a server to mimize consumption and maximize components lifetime.
# Principle is: nb of ESTABLISHED connections is checked. If null at t=0 and again null at t=09 min,
# then PC is going to OFF state. Note that connections are not checked in the 10 mins time window.
# Note also that ressources are only consummed when no connection is detected at the first check, then
# no additionnal process when PC is being used.
# an IP adress corresponding to Freebox is excluded from the hosts being checked.

# /etc/cron.daily/stopifnoconnection
# sudo chmod +x /etc/cron.daily/stopifnoconnection
# sudo crontab -e
# * /10 * * * * /etc/cron.daily/stopifnoconnection

# nb of ESTABLISHED connections is checked
nbclients=`netstat -lataupe |grep ESTABLISHED |grep -v localhost|grep -v 192.168.0.254|wc -l`

if [ $nbclients -eq 0 ];
then
	# If none, then tempo of 09 mins
	sleep 540
	# nb of ESTABLISHED connections is re-checked and PC goes in OFF state if null again
	nbclients=`netstat -lataupe |grep ESTABLISHED |grep -v localhost|grep -v 192.168.0.254|wc -l`
	if [ $nbclients -eq 0 ]; then
		sudo /sbin/shutdown -h now
	fi
fi

Attention, il semble que si le PC client passe en veille, la connection ne soit plus détectée comme active au bout d'un certain temps, et le serveur peut s'arreter. Au reveil du PC client, problème...
Merci à  tous

Dernière modification par thurston (Le 13/01/2008, à 22:58)

Hors ligne

#9 Le 31/01/2010, à 18:36

manup31

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Salut ! j'utilise depuis quelques temps une solution dérivée du script de ce post pour arrêter mon serveur lorsqu'il ne "fait plus rien".
Il est par ailleurs démarré par un WOL émis par un client dans son boot.

Le truc que j'aimerais trouver maintenant, c'est comment redémarrer le serveur lorsqu'un client sort de veille ou d'hibernation. hmm

Autrement dit, comment envoyer une commande au sortir d'un suspend ou d'un hibernate, cette commande étant bien entendu le wakeonlan qui va bien.

Une idée où chercher ?

[Edit] Je vais essayer un 00-goserveur.sh avec mon wakeonlan dans /etc/acpi/resume.d/, apparemment on y trouve les scripts exécutés au réveil...

Dernière modification par manup31 (Le 31/01/2010, à 18:50)


manu'

Hors ligne

#10 Le 01/02/2010, à 08:51

thurston

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Salut,

Si tu trouves merci de le partager, j'avais aussi voulu le faire un temps.
Ce que fais pour ma part:
J'utilise un desklet Ping de gdesklets, qui m'indique en permanence l'état du serveur ( assez joli en plus), et qui, d'un clic sur le desklet lance le wakeonlan si l'on veut reveiller le serveur.
A+
T.

Hors ligne

#11 Le 07/02/2010, à 16:21

manup31

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Pour l'instant, je peux juste dire que créer un script exécutable dans /etc/acpi/resume.d/ (d'un client), script qui contienne le wakeonlan <MAC address du serveur> pour le redémarrer lorsque le client sort de veille, ça ne marche pas chez moi.
Pas encore cherché de log ou autre.
A suivre, donc.:)

[edit] j'essaierai le même script dans /etc/pm/sleep.d

Dernière modification par manup31 (Le 07/02/2010, à 17:39)


manu'

Hors ligne

#12 Le 12/02/2010, à 22:41

manup31

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Apparemment, ça marche. smilecool


manu'

Hors ligne

#13 Le 12/02/2010, à 23:05

Lootux

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

Cool ! sinon y avait peut etre aussi l'idee de mettre le wol dans le reveil reseau, enfin c'est une idee pas plus lol je sais pas ce que ça vaut...

sinon impec c'est ce qu'il me fallait, par contre dans le cas d'un reseau mixte win/samba + karmic sur karmic server les postes win ne peuvent pas gerer le retour de veille....un wol u avec un reveil lié a un acces reseau et non au magic packet aurait ete le bienvenu ;-)

Question : si une mise a jour auto est en cours sur le serveur, le fait de chercher uniquement les machines connectees pour l'extinction ne risque pas de poser un pb ?

Hors ligne

#14 Le 12/02/2010, à 23:37

thurston

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

à manup31

Quand tu dis ca marche tu parles de quoi au juste???
Rajouter le wakeonlan dans /etc/pm/sleep.d?
A+
Merci
T

Hors ligne

#15 Le 13/02/2010, à 16:43

manup31

Re : [RESOLU] Comment eteindre auto.. serveur si plus de connection client?

thurston a écrit :

à manup31

Quand tu dis ca marche tu parles de quoi au juste???
Rajouter le wakeonlan dans /etc/pm/sleep.d?
A+
Merci
T

Oui, c'est bien ça, un script dans /etc/pm/sleep.d (ou un lien sur le même script lancé au boot du client) qui contient le wakeonlan qu'il faut.


manu'

Hors ligne