Pages : 1
#1 Le 18/09/2010, à 13:53
- Alex0_^
Crontab /x minutes
Bonjour
Edit : il reste le problème du script que ne se lance pas tout seul en boucle.
La configuration de crontab pose problème, voir mon dernier post.
Je cherche un moyen de faire allumer mon serveur quand quelqu'un se connecte sur le réseau et à l'éteindre quand il n'y a plus personne.
J'ai fait des recherches et j'ai trouvé ça pour l'extinction (que j'ai modifié pour mes besoins) :
#!/bin/bash
export LANG="fr_FR.UTF-8"
PATH=/usr/sbin:/usr/bin:/sbin:/bin
# /etc/cron.daily/stopifnotuse
# sudo chmod +x /etc/cron.daily/stopifnotuse
# sudo crontab -e
#SHELL=/bin/sh
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# * /10 * * * * /etc/cron.daily/stopifnotuse
# Debit limite en dessous duquel le pc sera eteint, en ko/s
# si (stopserveur == 0) alors serveur reste en fonction
# si (stopserveur == 1) alors serveur s eteint
# les adresses ip testees sont 192.168.0.2 192.168.0.11
debit='10' ;
stopserveur='1' ;
for i in 2 22
do
adresse="192.168.0.${i}"
ping -c 2 $adresse
if [ "$?" -eq 0 ] ;
then stopserveur='0';
fi
done
if [ "$stopserveur" -eq "1" ] ;
then echo "aucun pc connu sur le reseau" ;
# Debit actuel sur eth
packets1=$(/sbin/ifconfig eth | awk -F'[ :]' '/Octets transmis/ {print $18}') ;
sleep "2" ;
packets2=$(/sbin/ifconfig eth | awk -F'[ :]' '/Octets transmis/ {print $18}') ;
soustraction=$(( $packets2-$packets1 )) ;
if [ "$soustraction" -ne "0" ] ;
then speed=$(( $soustraction/2048 )) ;
# Avant d'eteindre le pc, on va verifier qu'il n'y a pas d'activite importante sur eth0
echo "Det actuel sur eth: ${speed} Ko/s" ;
else speed="0";
fi
if [ "$speed" -le "$debit" ] ;
then echo "debit faible et aucun PC sur le reseau donc extinction server" ;
sudo /sbin/shutdown -h now ;
else echo "debit trop important le serveur reste en fonction" ;
fi
else echo "un ou plusieurs pc sont sur le reseau" ;
fi
Ensuite pour le démarrage je bloque un peu ...
Les autres pc sont sous windows donc c'est difficile de faire un script ...
Mon serveur supporte le WakeOnLan et ca fonctionne bien avec un logiciel sous windows.
J'ai trouvé un logiciel qui fonctionne en ligne de commande :
(une fois dans le dossier du prog, sous windows je fais : ) WakeOnLanBatch /w:NomDuPc
Et cela fonctionne.
Mais je n'arrive pas à l'executer à l'aide d'un script sous windows.
Script qui se lancerai tout seul au démarrage d'un des pc sous windows.
Merci de m'aider
Edit :
Pour le moment j'arrive à le faire en utilisant un petit code C++ que j'ai fait :
#include <iostream>
#include "main.h"
using namespace std;
int main()
{
system("WakeOnLanBatch /w:Serveur");
return 0;
}
Mais il doit y avoir mieux ..
Dernière modification par Alex0_^ (Le 19/09/2010, à 15:52)
Hors ligne
#2 Le 18/09/2010, à 22:00
- wido
Re : Crontab /x minutes
Bonjour,
tu peux passer par cette commande pour éteindre un pc:
dbus-send --system --print-reply --dest="org.freedesktop.Hal" /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
ça t'évite d'utiliser le sudo.
Hors ligne
#3 Le 19/09/2010, à 15:49
- Alex0_^
Re : Crontab /x minutes
Enfait le script fonctionne lorsque je le lance tout seul.
Mais je n'arrive pas à l'intégrer correctement à cron.
J'essaye de configurer crontab -e comme ça :
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow command
/5 * * * * /etc/cron.daily/stopifnotuse
Mais :
crontab: installing new crontab
"/tmp/crontab.dMwpnf/crontab":3: bad minute
errors in crontab file, can't install.
Dernière modification par Alex0_^ (Le 19/09/2010, à 15:53)
Hors ligne
Pages : 1