Mehrer Rechner starten / beenden: Plugin bauen

Kleine Helferlein für das Image auf der Box

Moderatoren: DrStoned, PauleFoul

Antworten
Nachricht
Autor
Squicky
Gelegenheits-Streamer
Gelegenheits-Streamer
Beiträge: 31
Registriert: Fr 17 Feb 2006, 17:19

Mehrer Rechner starten / beenden: Plugin bauen

#1 Beitrag von Squicky » Di 16 Jan 2007, 23:50

Hallo

Ich möchte zwei PCs per dbox starten und ausschalten können.
Mit dieser Anleitung (http://www.jackthegrabber.de/viewtopic.php?t=4273) funktioniert es perfekt. Aber leider kann man in die "wol" Datei immer nur einen Rechner (IP und MAC) haben. Ich muste an der dbox und an der WOl Datei etwas basteln, aber nun geht es perfekt. Die WOL Datei sieht so aus:

Code: Alles auswählen

#!/bin/sh

ping -c 2 192.0.0.37 #hier IP des Remote-PC's eintragen

if [ $? -eq 1 ]; then
/bin/etherwake 00:16:02:B6:25:A5 #hier MAC-Adresse des Remote-PC's eintragen
wget -q -O /dev/null http://127.0.0.1/control/message?popup=PC%20Nr%201%20wird%20eingeschaltet%20!%20!%20!
else 
wget -q -O /dev/null http://127.0.0.1/control/message?popup=PC%20Nr%201%20wird%20ausgeschaltet%20!%20!%20!
/bin/cat /var/plugins/rscript | /bin/nc -i 1 192.0.0.37 23 & #hier IP des Remote-PC's eintragen die 23 am Schluß ist Portadresse für den nc Befehl
fi

exit 0
So mit ist der Befehl um den PC zu starten:

Code: Alles auswählen

/bin/etherwake 00:16:02:B6:25:A5
und der Befehl um den PC auszuschalten:

Code: Alles auswählen

/bin/cat /var/plugins/rscript | /bin/nc -i 1 192.0.0.37 23
[/code]


Am besten wäre es, wenn man ein Flexmenü-Eintrag hätte.
Wenn man diesen Flexmenü-Eintrag (= FME) startet, soll er zuerst, genau wie im WOL Plagin, die Rechner anpingen. Denn zuerst soll pro Rechner in einer Zeile der aktuelle Zustand (aus/an) angezeigt werden.
Beispiel, wenn PC Nr.1 an und PC Nr.2 aus ist:
Der Computer Nr. 1 ist eingeschaltet
Der Computer Nr. 2 ist ausgeschaltet

Diesen Zustand sollte der FME aus dem ping Versuch bekommen. (Der WOL Timer Plugin bezieht diese Information aus dem "mount-Versuch". Dies ist aber ein großer nach Teil bei mir, denn per WOL-Timer Plugin kann ich den PC nicht wirklich ausschalten. Mal geht es, mal geht es nicht und mal wird der PC erst nach 0,5 bis 3 min ausgeschaltet, und man bekommt dann Melden bzgl. mount-Versuche.)

Nach der Zustandsanzeige der Rechner, sollten dann die eigentlichen Befehle ("ACTION") um den Pc an/aus zuschalten kommen.

Damit sollt der FME für das oben genannt Beispiel ca. so aussehen:

Code: Alles auswählen

aktueller Zustand laut ping:
Der Computer Nr. 1 ist eingeschaltet
Der Computer Nr. 2 ist ausgeschaltet

Zustand ändern:
Computer Nr. 1 ausschalten !
Computer Nr. 2 einschalten !
Könnte mir jemand mit diesem Flexmenü-Eintrag helfen. Wäre euch super dankbar, denn ich bin was dbox angeht in den Kinder aaachhhhh in den Baby Schuhen.

P.S. IP von Rechner Nr. 2 ist 192.0.38 und die Mac ist 00:10:9A:C2:12:B4


Danke

Squicky
Gelegenheits-Streamer
Gelegenheits-Streamer
Beiträge: 31
Registriert: Fr 17 Feb 2006, 17:19

Erste Version fertig

#2 Beitrag von Squicky » Do 18 Jan 2007, 3:59

Hallo

Habe die erste Version fertig:

Code: Alles auswählen

  MENU=Computer ein-/ausschalten
      SHELLRESOFF=PC Nr.1 (192.0.0.37) einschalten,/bin/etherwake 00:16:02:B6:25:A5,ping -c 1 192.0.0.37, PC Nr.1 (192.0.0.37) einschalten ...
      SHELLRESON=PC Nr.1 (192.0.0.37) ausschalten,/bin/cat /var/plugins/rscript | /bin/nc -i 1 192.0.0.37 23,ping -c 1 192.0.0.37, PC Nr.1 (192.0.0.37) ausschalten ...
      SHELLRESOFF=PC Nr.2 (192.0.0.38) einschalten,/bin/etherwake 00:10:9A:C2:12:B4,ping -c 1 192.0.0.38, PC Nr.2 (192.0.0.38) einschalten ...
      SHELLRESON=PC Nr.2 (192.0.0.38) ausschalten,/bin/cat /var/plugins/rscript | /bin/nc -i 1 192.0.0.38 23,ping -c 1 192.0.0.38, PC Nr.2 (192.0.0.38) ausschalten ...
  ENDMENU
Das doof an diesem Menüeintrag ist nur, dass der ping-Versuch vier mal gestartet wird. Wenn aber der Rechner, der angepingt wird aus ist (IP nicht erreichbar), dann wartet das ping-Programm 10 Sekunden auf eine Antwort. Wenn nur ein Rechner aus ist, dann braucht das Menü 20 Sekunden bis es sich öffnet, wenn beide Rechner aussind, dann braucht es 40 Sekunden. Dabei würde eine Wartezeit vonmax. einer halten Sekunde reichen, denn die Rechner und dbox befinden sich alle im selben Netzwerk.
WIe kannman die Wartezeit auf eine Antwort demping Programm mitteilen.
Bei WIndows geht dies mit "-w x":

Code: Alles auswählen

ping -w 1000 192.0.0.38
Hier wartet das ping-Programm eine Sekunde (1000 Millisekunden).

Bei widnows: "ping -w x IP-Adresse" Das ping Programm wartet hier max. x Millisekunden auf eine antwort.

Diesen Befehl habe ich auf der dbox schon versucht: Er geht nicht.
Wie lautet dieser Befehl auf der dbox?
Man muss dies aber einstellen können, in den Netzwerk-Einstellungen kannman die Netzwerk-Einstellungen testen, und dort werdenauch Server aus dem Internet angeping. Undauch wenn keine Verbindung besteht, erhalt man die Anzeige sehr schnell.

Wie kann man beim ping-Programm der dbox die Wartezeit auf eine Antwort einstellen?



Danke

usul
Gelegenheits-Streamer
Gelegenheits-Streamer
Beiträge: 62
Registriert: Mo 22 Nov 2004, 18:25

Re: Erste Version fertig

#3 Beitrag von usul » Do 18 Jan 2007, 9:49

Squicky hat geschrieben:Wie kann man beim ping-Programm der dbox die Wartezeit auf eine Antwort einstellen?
Geht nicht. Die Programme in der Busybox sind gegenüber den Standalone Versionen teilweise extrem abgespeckt.
Und bei den Netzwerkeinstellungstest wird vermutlich nicht Ping aufgerufen sondern der Ping ist selber programmiert.

Ich mache das so (als Workaround):

Code: Alles auswählen

if [ -e /tmp/.serverstat ]; then rm /tmp/.serverstat; fi 
ping -c 1 deimos > /dev/null && touch /tmp/.serverstat &

<Irgendein Code der min. 0,5 Sekunden braucht>

if [ -e /tmp/.serverstat ]; then
  message="Server an"
else
  message="Server aus"
fi
Auf dieser Basis kann man natürlich auch ein ersatz Ping Script prgrammieren was sich aus den anderen Scripts herraus aufrufen lässt.

cu
usul

BTW: Hier mein Script zur Serverwerwaltung. Es basiert auf Gorcons HDD Speicheranzeige Script. Es lässt sich natürlich auch auf zwei Server anpassen.

Bild

Code: Alles auswählen

#!/bin/sh

if [ -e /tmp/.serverstat ]; then rm /tmp/.serverstat; fi 
ping -c 1 deimos > /dev/null && touch /tmp/.serverstat &

MOUNTPOINT=/mnt/custom
SPEICHER=`df -h $MOUNTPOINT | sed -n '2p' | sed -e 's/ \+/ /g'`
if [ ! -n "$SPEICHER" ];
	then
		HDDSPACE1="NFS Server nicht gemountet"
		HDDSPACE2="~n~s"
	else
		FREI=`echo "$SPEICHER" | cut -d " " -f 4 | sed -e 's/[^0-9]*$/ &B/'`
		PROZ=`echo "$SPEICHER" | cut -d " " -f 5 | sed -e 's/[^0-9].*//'`
		TEIL_1=`echo "I" | sed -e 's/./&/'$(expr $PROZ + 1) -e 's/.//'`
		TEIL_2=`echo "." | sed -e 's/./&/'$(expr 101 - $PROZ) -e 's/.//'`
		BALKEN=`echo $TEIL_1$TEIL_2 | sed -e '{s/\(.\{90\}\)/\1~R/;s/\(.\{75\}\)/\1~Y/}'`
		HDDSPACE1="HDD~T150Freier Speicher:~T360$FREI"
		HDDSPACE2="~n~c~G$BALKEN ~S($PROZ%)~n~s"
	fi

MOUNTPOINT=/var
SPEICHER=`df -h $MOUNTPOINT | sed -n '2p' | sed -e 's/ \+/ /g'`
FREI=`echo "$SPEICHER" | cut -d " " -f 4 | sed -e 's/[^0-9]*$/ &B/'`
PROZ=`echo "$SPEICHER" | cut -d " " -f 5 | sed -e 's/[^0-9].*//'`
TEIL_1=`echo "I" | sed -e 's/./&/'$(expr $PROZ + 1) -e 's/.//'`
TEIL_2=`echo "." | sed -e 's/./&/'$(expr 101 - $PROZ) -e 's/.//'`
BALKEN=`echo $TEIL_1$TEIL_2 | sed -e '{s/\(.\{90\}\)/\1~R/;s/\(.\{80\}\)/\1~Y/}'`
VARSPACE="VAR~T150Freier Speicher:~T360$FREI~n~c~G$BALKEN ~S($PROZ%)~n~s"

if [ -e /tmp/.serverstat ]; then
  message="Server an"
  def=2
else
  message="Server aus"
  def=1
fi 

if [ -e /var/etc/.autotv ]; then
  autotvon="~GX ~STV automatisch an"
  autotvoff="~G0 ~STV nicht automatisch an"
else
  autotvon="~G0 ~STV automatisch an"
  autotvoff="~GX ~STV nicht automatisch an"
fi

msgbox size=32 refresh=2 timeout=300 title="Speicherauslastung" msg="$HDDSPACE1~T530($message)$HDDSPACE2~n$VARSPACE" select="Server anschalten,Server ausschalten,$autotvon,$autotvoff" order=2 default=$def

ergebnis=$?

if [ $ergebnis = 1 ]; then
  /var/bin/server on
fi

if [ $ergebnis = 2 ]; then
  /var/bin/server off
fi 

if [ $ergebnis = 3 ]; then
  touch /var/etc/.autotv > /dev/null
fi

if [ $ergebnis = 4 ]; then
  rm /var/etc/.autotv > /dev/null
fi

exit 0 

Antworten