Bashscript mit crontab

16/11/2009 - 09:29 von Jan Pietrusky | Report spam
Hallo Zusammen,
ich habe hier ein kleines Script geschriben, um aktive Clienten in einem
Netz zu detektieren.
Das Script erstellt unten eine Liste mit den IP-NUmmern der offenen
clienten. Ist die leer, wird der Server runtergefahren.

Von der KOmmandozeile funktioniert das Script auch wunderbar. Wenn ich
dies allerdings in crontab einbaue, wird mir immer die Server IP mit in
die Testdatei geschrieben. Das ist das erste Seltsame.

Um das zu umgehen habe ich das sed-Kommando eingebaut. Dieses
funkioniert auch auf der Kommandozeile. Von crontab aufgerufen löscht es
alles. Was passiert hier denn?

Es wàre schön, wenn mich jemand auf die richtige Fàhrte setzen könnte :-)

mein crontabaufruf ist

*/5 * * * * root /usr/local/bin/clientalive



Hier das Script:
#!/bin/bash
##################################################################
#
# clientalive
#
# Abfrage aller clienten aus der bind config
#
###################################################################

# Dirlist
BINDDIR='/var/named'
VARDIR='/var/local/clientalive'
TEMP='/tmp'
[ -d $VARDIR ] || mkdir $VARDIR

# Filellist
IP_TABLE="$VARDIR/ip_table"
BLOCKLIST="$VARDIR/blocklist"
OPENCLIENTS="$VARDIR/openclients"

[ -f $BLOCKLIST ] || touch $BLOCKLIST

# Einlesen der IP Adressen
cat $BINDDIR/privatedns.zone |grep "192.168" > $TEMP/ip_tmp
awk '{print $4}' $TEMP/ip_tmp > $IP_TABLE


SERVER_IP="`ifconfig eth0|grep 'inet Adresse'|awk '{print $2}'|sed -e
's/Adresse://'`"

echo "Server-IP: $SERVER_IP"

# Wenn file existiert, dann löschen
# File auf NUll Setzen
cat /dev/null > $OPENCLIENTS

# Ping auf clienten mit ausnahme der blockliste
while read CLIENT_IP
do
# echo "IP Adresse: $CLIENT_IP"
# if [ "$CLIENT_IP" = $SERVER_IP ]; then
# echo "Server blocked: $SERVER_IP"
# else
if [ -n "`grep $CLIENT_IP $BLOCKLIST`" ]; then
echo "Entry blocked: $CLIENT_IP"
elif [ -z "`ping -c 1 $CLIENT_IP| grep '100% packet loss'`" ]; then
echo "-->$CLIENT_IP"
echo "$CLIENT_IP" >> $OPENCLIENTS
fi
# fi
done < $IP_TABLE

sed -e "/$SERVER_IP/d" $OPENCLIENTS > $TEMP/ip_tmp
mv $TEMP/ip_tmp $OPENCLIENTS

# noch ersetzen
[ -s $OPENCLIENTS ] || echo "shut down now!"
 

Lesen sie die antworten

#1 helmut
16/11/2009 - 10:09 | Warnen spam
Hallo, Jan,

Du meintest am 16.11.09:

Von der KOmmandozeile funktioniert das Script auch wunderbar. Wenn
ich dies allerdings in crontab einbaue, wird mir immer die Server IP
mit in die Testdatei geschrieben. Das ist das erste Seltsame.



Nein - das ist nicht seltsam. Ein Cronjob hat (wenn nichts speziell
definiert ist) einen recht kurzen Suchpfad. Insbesondere gehört "/sbin"
nicht zum Suchpfad.

SERVER_IP="`ifconfig eth0|grep 'inet Adresse'|awk '{print $2}'|sed -e
's/Adresse://'`"



Entweder definierst Du

PATH=...
export PATH

oder Du schreibst "/sbin/ifconfig"

Viele Gruesse!
Helmut

Ähnliche fragen