Script abändern

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Script abändern

Beitrag von Huck Fin » 27.09.2011 16:45:15

Hi,
ich habe so ein schönes Script, dass überprüft welche IPs noch online sind.

Code: Alles auswählen

#!/bin/sh
echo "Starting autoshutdown.sh ..."
beep -f2000 -r2
# Liste der zu überwachenden Computer
IP1=192.168.22.5
IP2=192.168.22.30
IP3=192.168.22.31
if (ping -c 3 $IP1 || ping -c 3 $IP2 || ping -c 3 $IP3 ||\
    (echo "90 Sekunden Tiefschlaf"; sleep 90; ping -c 3 $IP1) || ping -c 3 $IP2 || ping -c 3 $IP3)
then
    echo "Mindestens 1 Client am Netz. "
else
    echo "Alle Clients offline, Server wird heruntergefahren. "
    # Eintrag ins Logfile
    echo "Alle Clients offline, Server wird heruntergefahren. " | logger -i -t autoshutdown.sh
beep -f2000 -r4
sleep 15
beep -f2000 -r4
    echo "Server Auto Shutdown.." `date +%d.%m.%Y-%H:%M`>>/home/daten/updowntime.txt
    /sbin/shutdown -h 1  
fi
echo "Ende von autoshutdown.sh ..."
# beep -f3000  
exit 0
Nun hätte ich das gerne so geändert, dass die zu pingenden IPs (egal wie viele) aus einer Datei geholt werden.
Habe es probier mit

Code: Alles auswählen

while read ip
do
... 
done < /pfad/ips.txt
Aber ich bekomme es nicht so richtig ans laufen.
Brett vorm Kopf heute :oops:
Kann mir da mal jemand helfen ???

slu
Beiträge: 2234
Registriert: 23.02.2005 23:58:47

Re: Script abändern

Beitrag von slu » 27.09.2011 16:53:22

So ungefähr, hab es nicht getestet!

Code: Alles auswählen

#!/bin/sh
echo "Starting autoshutdown.sh ..."
beep -f2000 -r2
# Liste der zu überwachenden Computer
cat /tmp/clients.txt | while read DESTHOST ; do
if ping -c 3 $DESTHOST ; then
    echo "Mindestens 1 Client am Netz. "
else
    echo "Alle Clients offline, Server wird heruntergefahren. "
    # Eintrag ins Logfile
    echo "Alle Clients offline, Server wird heruntergefahren. " | logger -i -t autoshutdown.sh
beep -f2000 -r4
sleep 15
beep -f2000 -r4
    echo "Server Auto Shutdown.." `date +%d.%m.%Y-%H:%M`>>/home/daten/updowntime.txt
    /sbin/shutdown -h 1 
fi
echo "Ende von autoshutdown.sh ..."
# beep -f3000
done
exit 0
Edit:
Es stimmt noch nicht ganz, denn beim ersten Offline Client würde er herunterfahren. Man müsste sich das also z.B. in eine Variable schreiben und zum Schluss prüfen ob alle Clients Offline sind und dann den shutdown ausführen.
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Re: Script abändern

Beitrag von Huck Fin » 27.09.2011 16:58:07

Findest du hier noch nen Fehler ?

Code: Alles auswählen

#!/bin/sh

echo "Starting autoshutdown.sh ..."
beep -f2000 -r2
if 
while read IP4
do 
(ping -c 3 $IP4 ||\
    (echo "90 Sekunden Tiefschlaf"; sleep 9; ping -c 3 $IP4))
done < /home/daten/Daten/ips.txt
then
    echo "Mindestens 1 Client am Netz. "
else
    echo "Alle Clients offline, Server wird heruntergefahren. "
    # Eintrag ins Logfile
    echo "Alle Clients offline, Server wird heruntergefahren. " | logger -i -t autoshutdown.sh
beep -f2000 -r4
sleep 15
beep -f2000 -r4
    echo "Server Auto Shutdown.." `date +%d.%m.%Y-%H:%M`>>/home/daten/updowntime.txt
#  /sbin/shutdown -h 1
    
fi


echo "Ende von autoshutdown.sh ..."
# beep -f3000
    
exit 0

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Script abändern

Beitrag von Cae » 27.09.2011 17:01:34

Das Konstrukt

Code: Alles auswählen

#!/bin/sh

cat 'list.txt' | while read LINE; do
    echo "Und noch 'ne Zeile: $LINE"
done
funktioniert einwandfrei.

Vielen Dank @ slu, vor wenigen Tagen hatte ich schon einmal erfolglos diese Funktion nachzubauen versucht.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Re: Script abändern

Beitrag von Huck Fin » 27.09.2011 17:40:49

@slu
Du hast recht. Genau da hängt es.
Ich dachte schon es geht, aber bei mir sagt er erste ip ist da, zweite ip ist offline, also shutdown.

Ich hänge momentan hier...

Code: Alles auswählen

#!/bin/sh
if 
while read IP
do 
(ping -c 3 $IP ||\
    (echo "9 Sekunden Tiefschlaf"; sleep 9; ping -c 3 $IP))
done < /home/daten/Daten/script/iplist.txt
then
    echo "Mindestens 1 Client am Netz. "
else
    echo "Alle Clients offline, Server wird heruntergefahren. "
    # Eintrag ins Logfile
    echo "Alle Clients offline, Server wird heruntergefahren. " | logger -i -t autoshutdown.sh
beep -f2000 -r4
sleep 15
beep -f2000 -r4
    echo "Server Auto Shutdown.." `date +%d.%m.%Y-%H:%M`>>/home/daten/updowntime.txt
#  /sbin/shutdown -h 1  
fi
echo "Ende von autoshutdown.sh ..."
# beep -f3000
exit 0
Vielleicht hat ja noch einer ne Idee ???

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script abändern

Beitrag von Meillo » 27.09.2011 18:13:31

Huck Fin hat geschrieben:Vielleicht hat ja noch einer ne Idee ???
Der erste und wichtigste Schritt ist immer zu vereinfachen. Eine grosse Hilfe dabei ist es Unix-Style statt Pascal-``Strukturierte Programmierung''-Stil zu verwenden. D.h. fruehe Ausstiege zu verwenden.

Wichtig ist zudem dir klar zu machen was genau du willst: Sobald du einen Client findest der online ist beendet das Script ohne etwas zu tun. Sonst faehrt es den Rechner runter.

Ich habe das mal fuer dich gemacht:

Code: Alles auswählen

#!/bin/sh

while read IP
do
        if ping -c 3 $IP || (echo "9 Sekunden Tiefschlaf"; sleep 9; ping -c 3 $IP)
        then
                echo "Mindestens 1 Client am Netz. "
                exit
        fi
done < /tmp/iplist.txt

msg="Alle Clients offline, Server wird heruntergefahren. "
echo "$msg"
echo "$msg" | logger -i -t autoshutdown.sh

beep -f2000 -r4
sleep 15
beep -f2000 -r4
echo "Server Auto Shutdown.." `date +%d.%m.%Y-%H:%M`>>/home/daten/updowntime.txt
#  /sbin/shutdown -h 1 
echo "Ende von autoshutdown.sh ..."
# beep -f3000
exit 0
Use ed once in a while!

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Script abändern

Beitrag von Cae » 27.09.2011 18:40:05

@Huck Fin: Bei der Wartezeit hat sich über drei Posts ein Fehler eingeschlichen, der im Dritten elegant korrigiert wurde.

Wir sagen 90 Sekunden und warten eineinhalb Minuten:
Huck Fin hat geschrieben:

Code: Alles auswählen

if (ping -c 3 $IP1 || ping -c 3 $IP2 || ping -c 3 $IP3 ||\
    (echo "90 Sekunden Tiefschlaf"; sleep 90; ping -c 3 $IP1) || ping -c 3 $IP2 || ping -c 3 $IP3)
Wir behaupten 90 Sekunden, warten aber nur 9 Sekunden:
Huck Fin hat geschrieben:

Code: Alles auswählen

(ping -c 3 $IP4 ||\
    (echo "90 Sekunden Tiefschlaf"; sleep 9; ping -c 3 $IP4))
Wir schreiben und warten 9 Sekunden:
Huck Fin hat geschrieben:

Code: Alles auswählen

(ping -c 3 $IP ||\
    (echo "9 Sekunden Tiefschlaf"; sleep 9; ping -c 3 $IP))
Nur so :D

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Script abändern

Beitrag von rendegast » 27.09.2011 19:46:39

Mein Vorschlag

Code: Alles auswählen

nmap -sP 192.168.22.0/24 |  grep -f $IPFILE     ;  echo $?

Code: Alles auswählen

$ cat IPFILE
192.168.22.5
192.168.22.30
192.168.22.31
Zuletzt geändert von rendegast am 27.09.2011 19:54:34, insgesamt 1-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Re: Script abändern

Beitrag von Huck Fin » 27.09.2011 19:54:16

Das mit den 90 sec habe ich auf 9 sec geändert, weil im test dauert das zu lange.

1000 Dank für die Lösung.

Test geht suuuper.

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Re: Script abändern

Beitrag von Huck Fin » 11.10.2011 23:29:55

Kann ich irgendwie noch abfragen, ob jemand per FTP verbunden ist ?
Da wird es mit der IP-Abfrage schwierig, weil der Benutzer kommt von
aussen durch die FritzBox über eine Portweiterleitung.
Ich habe Proftpd im Eimnsatz.

Ich möchte verhindern, dass der Server ausgeht, wenn jemand verbunden ist.

Nachtrag... Habe es scheinbar gelöst

Code: Alles auswählen

#!/bin/bash 
IPFILE=/home/Scripte/autodown/iplist.txt
if nmap -sP 192.168.22.0/24 | grep -f $IPFILE
 then echo IP online; exit
 else echo IP offline    
fi                       
                         
if netstat -t | grep ftp 
 then echo FTP online; exit
 else  echo FTP offline  
fi                       
echo Alle offline, zeit für Shutdown
# shutdown -h now 

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Script abändern

Beitrag von rendegast » 12.10.2011 21:51:34

Kann ich irgendwie noch abfragen, ob jemand per FTP verbunden ist ?
...
Ich habe Proftpd ...
ftpcount, ftpwho, ftpdctl ?

ftpdctl - ProFTPD control program
...
supporting actions like ... kicking FTP users, etc.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Re: Script abändern

Beitrag von Huck Fin » 12.10.2011 22:02:36

1000 Dank.
Die Befehle kannte ich noch nicht...

Nachtrag... Habe es scheinbar gelöst.
netstat -t | grep ftp

Antworten