A
aragorn
Guest
hab das script auch auch noch mal angepasst und etwas erweitert:
Code:
#!/bin/bash
#
# cron script for checking w(lan) connectivity
#
# /var/spool/cron/crontabs/root: * * * * * /etc/init.d/check-eth0.sh
#
# v1.21 (24.12.2012) modified by aragorn (ipc.pebkac.at)
#--------------------------------------------------
IP_FOR_TEST="192.168.1.11"
PING_COUNT=1
PING="/bin/ping"
INTERFACE="eth0"
LOGup=0
SaveFFLAG=0
FFLAG="/opt/check_lan/stuck.fflg"
LOGFILE="/var/log/$(basename $0 .sh).log"
_maxlogsize="2048"
_logrotate="1"
USBmodul="ftdi_sio"
### - ###
function _RotateFile () {
# check size of FILE
if [ -f "$1" ]; then
FileSize=$(stat --printf="%s" $1)
[ -z "$FileSize" ] && FileSize=0
if [ "$FileSize" -gt "$_maxlogsize" ]; then
if [ "$_logrotate" == 1 ]; then
echo "$(basename $0 .sh): rotating file $1"
logger "$(basename $0 .sh): rotating file $1"
mv -f $1 ${1}.1 >/dev/null 2>&1
else
echo "$(basename $0 .sh): resetting file $1"
logger "$(basename $0 .sh): resetting file $1"
rm -f $1 >/dev/null 2>&1
fi
touch $1
fi
fi
}
function _LogIt () {
_RotateFile $LOGFILE
echo "[$(date +"%d/%m/%Y %H:%M:%S")] $1" >> $LOGFILE
}
# ping test
$PING -c $PING_COUNT $IP_FOR_TEST > /dev/null 2> /dev/null
if [ $? -ge 1 ]; then
_LogIt "$INTERFACE is down"
echo 08 > /sys/devices/platform/bcm2708_usb/regoffset
echo 0x31 > /sys/devices/platform/bcm2708_usb/regvalue
if [ "$SaveFFLAG" == 1 ]; then
[ ! -d /opt/check_lan ] && mkdir -p /opt/check_lan
_RotateFile $FFLAG
touch $FFLAG
date >> $FFLAG
cat /sys/devices/platform/bcm2708_usb/regoffset >> $FFLAG
cat /sys/devices/platform/bcm2708_usb/regvalue >> $FFLAG
fi
if [ -n "$(lsmod | grep $USBmodul)" ]; then
_LogIt "USB Treiber entladen.."
modprobe -r $USBmodul
sleep 2
_LogIt "USB Treiber laden.."
modprobe $USBmodul
fi
else
[ "$LOGup" == 1 ] && _LogIt "$INTERFACE is up"
#rm -f $FFLAG 2>/dev/null
dummy=1
fi
#---------------------------------------------------------------
altes, fehlerhaftes script (damit die veränderungen nachvollzogen werden können)
Code:
#!/bin/bash
#
# cron script for checking w(lan) connectivity
#
# /var/spool/cron/crontabs/root: * * * * * /etc/init.d/check-eth0.sh
#
# v1.1 (16.11.2012) modified by aragorn (ipc.pebkac.at)
#--------------------------------------------------
IP_FOR_TEST="192.168.1.1"
PING_COUNT=1
PING="/bin/ping"
INTERFACE="eth0"
SaveFFLAG=0
FFLAG="/opt/check_lan/stuck.fflg"
LOGup=0
LOGFILE="/var/log/$(basename $0 .sh).log"
_maxlogsize="2048"
_logrotate=1
### - ###
function _RotateFile () {
# check size of FILE
if [ -f "$1" -a "$(stat --printf="%s" $1)" -gt "$_maxlogsize" ]; then
if [ "$_logrotate" == 1 ]; then
echo "$(basename $0 .sh): rotating file $1"
logger "$(basename $0 .sh): rotating file $1"
mv -f $1 ${1}.1 >/dev/null 2>&1
else
echo "$(basename $0 .sh): resetting file $1"
logger "$(basename $0 .sh): resetting file $1"
rm -f $1 >/dev/null 2>&1
fi
touch $1
fi
}
function _LogIt () {
_RotateFile $LOGFILE
echo "[$(date +"%d/%m/%Y %H:%M:%S")] $1" >> $LOGFILE
}
# ping test
$PING -c $PING_COUNT $IP_FOR_TEST > /dev/null 2> /dev/null
if [ $? -ge 1 ]; then
_LogIt "$INTERFACE is down"
if [ "$SaveFFLAG" == 1 ]; then
[ ! -d /opt/check_lan ] && mkdir -p /opt/check_lan
_RotateFile $FFLAG
date >> $FFLAG
echo 08 > /sys/devices/platform/bcm2708_usb/regoffset
cat /sys/devices/platform/bcm2708_usb/regvalue >> $FFLAG
echo 0x31 > /sys/devices/platform/bcm2708_usb/regvalue
cat /sys/devices/platform/bcm2708_usb/regvalue >> $FFLAG
fi
_LogIt "USB Treiber entladen.."
modprobe -r ehci_hcd
sleep 2
_LogIt "USB Treiber laden.."
modprobe ehci_hcd
else
[ "$LOGup" == 1 ] && _LogIt "$INTERFACE is up"
#rm -f $FFLAG 2>/dev/null
dummy=1
fi
#---------------------------------------------------------------
- SaveFFLAG=0 -> 0/1 --> wenn das auf 1 gestellt wird, wird das FFLAG wie im original script geschrieben, auf 0 eben nicht..
- LOGup=0 -> 0/1 --> wenn das auf 1 gestellt wird, wird auch "eth0 is up" ins log geschrieben, ansonsten eben nur wenn eth0 down ist..
- LOGFILE="/var/log/$(basename $0 .sh).log" --> das logfile in dem up/down protokoliert werden soll. $(basename $0 .sh) dient dazu den namen des scripts als logfile-namen zu verwenden..
- _maxlogsize="2048" --> wie gross LOGFILE maximal werden darf bevor es:
- _logrotate=1 -> 0/1 --> wenn das auf 1 gestellt wird, wird das logfile beim erreichen der maxlogsize rotiert, also das alte file mit dateiendung .1 umbenannt. auf 0 wird es gelöscht (gilt auch fürs FFLAG file)
Zuletzt bearbeitet von einem Moderator: