Hallo Leute,
ich brüte hier seit längerer Zeit über einem Start-/Stop-Initskript, das nicht so will wie ich :-(
Das Skript soll bei Systemstart die Wlan-Datenzähler RX und TX auf Null setzen. Das klappt.
Beim Shutdown soll die seit letztem Zurücksetzen von RX und TX angefallene Datenmenge ermittelt, mit der bisherigen Datenmenge addiert und dann gespeichert werden. Hier gibt es Probleme.
Wenn ich das Skript von Hand mit „Skriptname start“ starte oder „Skriptname stop“ stoppe klappt alles wunderbar – keine Fehlermeldungen in der Shell.
Ok, ich könnte das Problem umgehen, indem ich den „Starteil“ hinter den „Stopteil“ setze, doch wäre das m. M. n. nicht so sauber und außerdem geht es mir hier auch ums Prinzip ein Start-/Stop-Skript zum Laufen zu bringen.
Im Internet habe ich gelesen, dass die Parameter „start“ und „stop“ durch die Namensgebung der Verlinkung in /etc/init.d/rc?.d/ festgelegt wird. Wenn der Link mit S??... beginnt wird „start“ übergeben, wenn er mit K??... anfängt ein „stop“. Das habe ich (von Hand – YaST legt das so nicht an!?) probiert, jedoch ohne Effekt außer, dass in YaST dann der markierte Runlevel 0 und 6 gelöscht wurde. In YaST hatte ich die Runlevel 0 3 5 6 aktiviert.
Das Skript ist mit chmod 755 ausführbar gemacht. Es verzweigt nicht auf andere Skripte. Die gewünschten Aktionen befinden sich komplett innerhalb des Start-/Stop-Skriptes.
Hat jemand ne Idee? Oder kann es daran liegen, dass ich im Dateinamen eckige Klammern [] verwendet habe? Das Skript sieht so aus:
Habe die Kommentare so einigermaßen hingeschoben, damit es etwas übersichtlicher wird.
Danke Euch.
ich brüte hier seit längerer Zeit über einem Start-/Stop-Initskript, das nicht so will wie ich :-(
Das Skript soll bei Systemstart die Wlan-Datenzähler RX und TX auf Null setzen. Das klappt.
Beim Shutdown soll die seit letztem Zurücksetzen von RX und TX angefallene Datenmenge ermittelt, mit der bisherigen Datenmenge addiert und dann gespeichert werden. Hier gibt es Probleme.
Wenn ich das Skript von Hand mit „Skriptname start“ starte oder „Skriptname stop“ stoppe klappt alles wunderbar – keine Fehlermeldungen in der Shell.
Ok, ich könnte das Problem umgehen, indem ich den „Starteil“ hinter den „Stopteil“ setze, doch wäre das m. M. n. nicht so sauber und außerdem geht es mir hier auch ums Prinzip ein Start-/Stop-Skript zum Laufen zu bringen.
Im Internet habe ich gelesen, dass die Parameter „start“ und „stop“ durch die Namensgebung der Verlinkung in /etc/init.d/rc?.d/ festgelegt wird. Wenn der Link mit S??... beginnt wird „start“ übergeben, wenn er mit K??... anfängt ein „stop“. Das habe ich (von Hand – YaST legt das so nicht an!?) probiert, jedoch ohne Effekt außer, dass in YaST dann der markierte Runlevel 0 und 6 gelöscht wurde. In YaST hatte ich die Runlevel 0 3 5 6 aktiviert.
Das Skript ist mit chmod 755 ausführbar gemacht. Es verzweigt nicht auf andere Skripte. Die gewünschten Aktionen befinden sich komplett innerhalb des Start-/Stop-Skriptes.
Hat jemand ne Idee? Oder kann es daran liegen, dass ich im Dateinamen eckige Klammern [] verwendet habe? Das Skript sieht so aus:
Code:
#! /bin/bash
################################################################################################
# #
# Init-Skript, das beim Systemstart und Shutdown ausgeführt wird. #
# #
# Startup: IP-Zähler RX und TX der wlan0-Schnittstelle auf Null setzen #
# Shutdown:IP-Traffic der Sitzungen einer Abrechnungsperiode addieren und in einer Datei sichern #
# #
# fertiges Skript speichern in /etc/init.d, ausführbar machen und im Runlevel-Editor aktivieren. #
# 18.05.2013 /mp #
# #
################################################################################################
### BEGIN INIT INFO
# Default-Start: 3 5
# Default-Stop: 0 6
# Short-Description: Start: Resetting RX+TX; Stop: Internettraffic sichern
# Description: längere Beschreibung noch verfassen
### END INIT INFO
PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
Schnittstelle=wlan0
echo "Running IP-Traffic...."
case "$1" in
start)
echo "Start: resetting RX + TX "
# hier kommen alle Befehle hin, die beim Booten ausgeführt werden sollen
# ggf. am Ende der Zeilen ein & einfügen, damit der Bootvorgang nicht stoppt
Treiber=`/sbin/ethtool -i $Schnittstelle | grep driver | awk {'print $2'}` # Treiber der Schnittstelle isolieren
/sbin/modprobe -r $Treiber # Treiber stoppen
sleep 1 # kurz warten
/sbin/modprobe $Treiber # und Treiber wieder starten -> RX und TX sind jetzt auf Null gesetzt
# sleep 1 # nicht nötig, wenn die Schnittstelle vom NetworkManager verwaltet wird
# ifup $Schnittstelle # Bei NetworkManager nicht nötig
;;
stop)
echo "Stop: Datentraffic ermitteln und sichern"
# hier kommen alle Befehle hin, die beim Herunterfahren des Systems ausgeführt werden sollen
# sonst wie oben
#
#
#
#################################################################################################
# #
# Wlan-Traffic protokollieren #
# 16.05.2013 /mp #
# #
# ifconfig muss für den user als sudo freigegeben sein! #
# #
################################################################################################################################################################################################
# Variablen definieren #
################################################################################################
Path="/var/log/"
Datei="-Internetvolumen.log"
PayDay=1 # der 1. des Monats ist Zahltag/Abrechnungstag?
Monat=`date +%b` # zur Unterscheidung der Log-Dateien den Monat auslesen
#
################################################################################################
# Datum ermitteln, um ab Providerabrechnungstag wieder mit 0 zu beginnen #
################################################################################################
#
if test `date +%d` = $PayDay # Beginnt heute der neue Abrechnungszeitraum des Providers?
then # ja
if test -e $Path$Monat$Datei # nach einem Reboot könnte die Datei schon existieren
then # ja, gibts schon
WlanRX_Bytes="`/sbin/ifconfig wlan0 | grep 'RX bytes:' | awk {'print $2'} | tr -d 'bytes:'`"
WlanTX_Bytes="`/sbin/ifconfig wlan0 | grep 'RX bytes:' | awk {'print $6'} | tr -d 'bytes:'`"
################################################################################################
# Kein Ethernet-Verkehr, sonst hier analog ermitteln und addieren #
################################################################################################
Sum_Traffic=`expr $WlanRX_Bytes + $WlanTX_Bytes` # aktuellen Traffic von RX und TX addieren
Sum_Traffic_Alt=`cat $Path$Monat$Datei` # Alten Traffic auslesen
Sum_Traffic_Neu=`expr $Sum_Traffic + $Sum_Traffic_Alt` # aktueller Traffic zzgl. altem Traffic = Neuer Traffic
echo $Sum_Traffic_Neu > $Path$Monat$Datei # Ergebnis sichern
else # nein, Log-Datei gibts noch nicht
echo "0" > $Path$Monat$Datei # Dann mit neuer Datei beginnen und IP-Traffic auf Null setzen
chmod 666 $Path$Monat$Datei # Alle können lesen und schreiben
Sum_Traffic_Neu=0
fi
else # Heute ist nicht der Providerabrechnungstag
if test -e $Path$Monat$Datei # Existiert die Log-Datei?
then # ja, die Datei existiert
WlanRX_Bytes="`/sbin/ifconfig wlan0 | grep 'RX bytes:' | awk {'print $2'} | tr -d 'bytes:'`"
WlanTX_Bytes="`/sbin/ifconfig wlan0 | grep 'RX bytes:' | awk {'print $6'} | tr -d 'bytes:'`"
################################################################################################
# Kein Ethernet-Verkehr, sonst hier analog ermitteln und addieren #
################################################################################################
Sum_Traffic=`expr $WlanRX_Bytes + $WlanTX_Bytes` # aktuellen Traffic von RX und TX addieren
Sum_Traffic_Alt=`cat $Path$Monat$Datei` # Alten Traffic auslesen
Sum_Traffic_Neu=`expr $Sum_Traffic + $Sum_Traffic_Alt` # aktueller Traffic zzgl. altem Traffic = Neuer Traffic
echo $Sum_Traffic_Neu > $Path$Monat$Datei # Ergebnis sichern
else # nein, die Datei existiert nicht
echo "0" > $Path$Monat$Datei # Datei wird erzeugt
chmod 666 $Path$Monat$Datei # Alle können lesen und schreiben
WlanRX_Bytes="`/sbin/ifconfig wlan0 | grep 'RX bytes:' | awk {'print $2'} | tr -d 'bytes:'`"
WlanTX_Bytes="`/sbin/ifconfig wlan0 | grep 'RX bytes:' | awk {'print $6'} | tr -d 'bytes:'`"
################################################################################################
# Kein Ethernet-Verkehr, sonst hier analog ermitteln und addieren #
################################################################################################
Sum_Traffic_Neu=`expr $WlanRX_Bytes + $WlanTX_Bytes` # aktuellen Traffic von RX und TX addieren
echo $Sum_Traffic_Neu > $Path$Monat$Datei # bisherigen Traffic in Datei sichern
fi
fi
#
#
#
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esac
exit 0
Habe die Kommentare so einigermaßen hingeschoben, damit es etwas übersichtlicher wird.
Danke Euch.