batch rechner übers netzwerk neustarten
batch rechner übers netzwerk neustarten
moin @ all,
habe ein script was die rechner übers netzwerk neustartet! (batch)
nun möchte ich einen weiteren punkt einfügen, das man alle aufgelisteten rechner neustarten kann.
wie erstellt man in der batch ein array oder ähnliches, wo man sich auf die arrayvariable beziehen kann wo alle ips drinstehen?
das hauptproblem ist, das ich die rechner erst auf erreichbarkeit prüfe und sie dann per goto zum reboot schicke!
also nehmen wir den fall das ich alle rechner neustarten möchte und er prüft den ersten und springt dann per goto zum reboot, dann wars das fürs programm und er ignoriert logischerweise alle anderen computer...möchte ihn jetzt nicht wieder zurückschicken und dann beim zweiten weitermachen lassen, am besten wär wenn er alle auf einmal prüft und dann ausgibt wer nicht erreichbar ist!
danke
gruß dave
habe ein script was die rechner übers netzwerk neustartet! (batch)
nun möchte ich einen weiteren punkt einfügen, das man alle aufgelisteten rechner neustarten kann.
wie erstellt man in der batch ein array oder ähnliches, wo man sich auf die arrayvariable beziehen kann wo alle ips drinstehen?
das hauptproblem ist, das ich die rechner erst auf erreichbarkeit prüfe und sie dann per goto zum reboot schicke!
also nehmen wir den fall das ich alle rechner neustarten möchte und er prüft den ersten und springt dann per goto zum reboot, dann wars das fürs programm und er ignoriert logischerweise alle anderen computer...möchte ihn jetzt nicht wieder zurückschicken und dann beim zweiten weitermachen lassen, am besten wär wenn er alle auf einmal prüft und dann ausgibt wer nicht erreichbar ist!
danke
gruß dave
Re: batch rechner übers netzwerk neustarten
Vielleicht so. Arrays kann man vielleicht optimaler programmieren oder aus einer Datei einlesen. Doof ist, dass "ping" eine Sekunde lang wartet bis es wirklich feststellt, dass der Rechner (hier 10.0.0.1) nicht erreichbar ist. Kann man vielleicht noch optimieren. SSH-Keys muss man natürlich austauschen oder den SSH-Befehl durch einen Reboot-Befehl ersetzen.
Code: Alles auswählen
#!/bin/bash
ip[1]="127.0.0.1"
ip[2]="10.0.0.1"
for element in $(seq 1 $((${#ip[@]} )))
do
i="${ip[$element]}";
output=`/bin/ping -c 1 -i 1 $i | /bin/fgrep icmp_seq`;
if [ -n "$output" ]; then
output=`/usr/bin/ssh root@$i /sbin/reboot`;
echo $output;
fi
done
Re: batch rechner übers netzwerk neustarten
Nur mal am Rande: Man kann den Exit-Status von ping auswerten, um zu sehen ob ein Host erreichbar ist.
man bash hat geschrieben: If ping does not receive any reply packets at all it will exit with
code 1. If a packet count and deadline are both specified, and fewer
than count packets are received by the time the deadline has arrived,
it will also exit with code 1. On other error it exits with code 2.
Otherwise it exits with code 0. This makes it possible to use the exit
code to see if a host is alive or not.
Code: Alles auswählen
$ ping -c1 -w1 chunky >/dev/null 2>&1; echo $?
1
$ ping -c1 -w1 brixx >/dev/null 2>&1; echo $?
0
MfG GoKi
:wq
:wq
Re: batch rechner übers netzwerk neustarten
Und dafür brauchst du hier nicht mal einen Array. In der Shell reichts auch, die Liste z.B. so anzugeben:
Code: Alles auswählen
liste="rechner1 rechner2 rechner3 rechner4"
for r in $rechner; do
... kommando für reboot ...
done
Re: batch rechner übers netzwerk neustarten
Ok, mein Programm war zu kompliziert. Als Einzeiler ist es auch gleich viel übersichtlicher:
Nun würde ich gerne noch "ping" direkt in den if-Teil bringen, um das Programm weiter zu minimieren. Hat jemand eine Idee?
Code: Alles auswählen
for r in `cat rechner.txt`; do ping -c1 -w1 $r >/dev/null 2>&1; if [ "$?" -eq 0 ]; then ssh root@$r /sbin/reboot ; fi; done
Re: batch rechner übers netzwerk neustarten
Code: Alles auswählen
for r in `cat rechner.txt`; do ping -c1 -w1 $r >/dev/null 2>&1 && ssh root@$r /sbin/reboot ; fi; done
Re: batch rechner übers netzwerk neustarten
Danke. Das "fi" war jedoch nun falsch. Also nun so:
Code: Alles auswählen
for r in `cat rechner.txt`; do ping -c1 -w1 $r >/dev/null 2>&1 && ssh root@$r /sbin/reboot ; done
Re: batch rechner übers netzwerk neustarten
Ups sorry, das hatte ich übersehen.
Re: batch rechner übers netzwerk neustarten
wow es geht sogar bei redhat systemen! RESPEKT!
könnte mir dann noch schnell jemand sagen wie ich sone liste unter windows in einer batch datei realisiere???
so ungefähr soll das aufgebaut sein, egal was davor und dahinter nun passiert. ich möchte einfach mehrere auf einmal verarbeiten!
Bitte um eure Hilfe
gruß david
könnte mir dann noch schnell jemand sagen wie ich sone liste unter windows in einer batch datei realisiere???
Code: Alles auswählen
:all
SET server=list
list="192.168.10.25 192.168.10.26 192.168.10.27"
goto accessible
Bitte um eure Hilfe
gruß david
Re: batch rechner übers netzwerk neustarten
OnkelDave hat geschrieben: könnte mir dann noch schnell jemand sagen wie ich sone liste unter windows in einer batch datei realisiere???
Code: Alles auswählen
set liste=a b c d
for %%i in (%liste%) do (
echo %%i
)
Gruß
gms
Re: batch rechner übers netzwerk neustarten
ok habs eben so gelöst..
aber so nimmt er immer nur den letzten eintrag aus der rechner.txt
einer ne idee wie man eine schleife drum baut, sodass er alle ausprobiert??
Danke schonmal für eure Mühe!
Code: Alles auswählen
:all
FOR /F "tokens=1" %%i IN (rechner.txt) DO net view \\%%i >nul 2>nul
if errorlevel 1 (GOTO networkDown) else GOTO rebootOrShutdown
einer ne idee wie man eine schleife drum baut, sodass er alle ausprobiert??
Danke schonmal für eure Mühe!
Re: batch rechner übers netzwerk neustarten
z.B so: ( ungetestet)OnkelDave hat geschrieben: einer ne idee wie man eine schleife drum baut, sodass er alle ausprobiert??
Code: Alles auswählen
:all
FOR /F %%i IN (rechner.txt) DO call :networkTest %%i
goto :EOF
:networkTest
net view \\%1
if errorlevel 1 goto :networkDown
goto :rebootOrShutdown
:networkDown
echo %1 is down
goto :EOF
:rebootOrShutdown
echo %1 is up
goto :EOF