Hallo Achim,
ich hab mich mal dran gemacht ein Watchdog Skript anzupassen.
Funktionieren soll das ganze so:
Der Solar-Logger schreibt eine Watchdog.txt Datei die er nach einer bestimmten Zeit aktualisiert.
Das Skript überprüftob sich die Datei Ändert oder nicht.
Ändert sich die Datei nicht wird der Solar-Logger neu gestartet.
#!/bin/sh
#
# Solar-Logger - A Daemon for logging Data from a Solar Plant
# Copyright (C) 2007 Klaus Dotterweich (dr.dotti@gmx.de)
#
# This program is free software; you can redistribute it and/or modify it under the terms of the
# GNU General Public License as published by the Free Software Foundation;
# either version 3 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with this program;
# if not, see .
#
# Solar-Logger - Ein Daemon zum loggen der Daten einer Solaranlage
# Copyright (C) 2007 Klaus Dotterweich (dr.dotti@gmx.de)
#
# Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License,
# wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren,
# entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
#
# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird,
# aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder
# der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
#
# Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben.
# Falls nicht, siehe .
#
Loggen="JA" # Um das Loggen zu aktivieren JA sonst NEIN
LogDatei='/root/Solar-Logger-0.3/DebugLog/Solar-Logger-Watchdog.log' # Datei in die geloggt werden soll
WatchdogDatei='/var/www/SolarAnlage/Details/Watchdog.txt' # Die Watchdog Datei die Überprüft werden soll
#StartBefehl='/root/Solar-Logger-0.3/Solar-Logger -d' # Befehl zum starten des Solar-Loggers
StartBefehl='' # Befehl zum starten des Solar-Loggers
WatchdogZeit=1 # Intervall in Minuten in der der der Watchdog die Watchdog Datei Überprüft
StartZeit=5 # Zeit in Minuten nachdem der Solar-Logger gestartet werden soll wenn sich die Watchdog Datei nicht mehr geändert hat.
#######################
# Startzeit des Skriptes Merken
#######################
ZeitstempelStart=`date '+%s'`
###########################################
# Überprüfe ob der Watchdog schon läuft
###########################################
if [ -f /var/run/Solar-Logger-Watchdog.pid ]
then
if [ $Loggen = "JA" ]
then
echo `date '+%d.%m.%y %T'`: Watchdog ist bereits gestartet. >> $LogDatei
fi
exit
else
echo $$ > /var/run/Solar-Logger-Watchdog.pid
fi
#####################
# Start des Watchdog loggen
#####################
if [ $Loggen = "Ja" ]
then
echo `date '+%d.%m.%y %T'`: Autoshutdown started >> $LogDatei
echo `date '+%d.%m.%y %T'`: WatchdogZeit is $WatchdogZeit in Minuten >> $LogDatei
echo `date '+%d.%m.%y %T'`: StartZeit is $StartZeit in Minuten >> $LogDatei
fi
TempWatchdogDatei=''
TempStartZeit=StartZeit # Die Zeit zum Starten des Solar-Loggers wieder zurücksetzen
#####################
# Programmschleife
#####################
while [ true ]
do
#######################
# Startzeit der Schleifen Merken
#######################
ZeitstempelStartSchleife=`date '+%s'`
# Überprüfe ob sich die WatchdogDatei geändert hat
if 'cat $WatchdogDatei' <> TempWatchdogDatei
then
# Wenn sich die Watchdogdatei geändert hat
TempWatchdogDatei='cat $WatchdogDatei'
TempStartZeit=StartZeit # Die Zeit zum Starten des Solar-Loggers wieder zurücksetzen
if [ $Loggen = "Ja" ]
then
echo `date '+%d.%m.%y %T'`: Watchdog Datei hat sich geändert. >> $LogDatei
echo `date '+%d.%m.%y %T'`: Die TempStartZeit beträgt $TempStartZeit. >> $LogDatei
fi
else
# Wenn sie sich nicht geändert hat
TempStartZeit=`/usr/bin/expr $TempStartZeit - $WatchdogZeit`
if [ $Loggen = "Ja" ]
then
echo `date '+%d.%m.%y %T'`: Watchdog Datei hat sich nicht geändert. >> $LogDatei
echo `date '+%d.%m.%y %T'`: Die TempStartZeit beträgt $TempStartZeit. >> $LogDatei
fi
fi
# Überprüfe ob StartZeit abgelaufen ist
if [ "$TempStartZeit" -le 0 ]
then
# Wenn StartZeit abgelaufen ist
# Solar Logger starten
$StartBefehl
fi
#######################
# Endezeit der Schleifen Merken
#######################
ZeitstempelEndeSchleife=`date '+%s'`
#################################################
# SchleifenZeit berechnen
#################################################
SchleifenZeit=`/usr/bin/expr $ZeitstempelEndeSchleife - $ZeitstempelStartSchleife`
if [ $Loggen = "Ja" ]
then
echo `date '+%d.%m.%y %T'`: Die Schleifenzeit beträgt $SchleifenZeit. >> $LogDatei
fi
# Den Watchdog schlafen legen
if [ $Loggen = "Ja" ]
then
echo `date '+%d.%m.%y %T'`: Watchdog legt sich für $WatchdogZeit Minuten schlafen. >> $LogDatei
fi
sleep '/usr/bin/expr $WatchdogZeit \* 60'
done
Nur leider hab ich noch ein paar Probleme.
Der folgende Teil macht mir noch Problem:
# Überprüfe ob sich die WatchdogDatei geändert hat
if 'cat $WatchdogDatei' <> TempWatchdogDatei
then
# Wenn sich die Watchdogdatei geändert hat
TempWatchdogDatei='cat $WatchdogDatei'
TempStartZeit=StartZeit # Die Zeit zum Starten des Solar-Loggers wieder zurücksetzen
if [ $Loggen = "Ja" ]
then
echo `date '+%d.%m.%y %T'`: Watchdog Datei hat sich geändert. >> $LogDatei
echo `date '+%d.%m.%y %T'`: Die TempStartZeit beträgt $TempStartZeit. >> $LogDatei
fi
else
# Wenn sie sich nicht geändert hat
TempStartZeit=`/usr/bin/expr $TempStartZeit - $WatchdogZeit`
if [ $Loggen = "Ja" ]
then
echo `date '+%d.%m.%y %T'`: Watchdog Datei hat sich nicht geändert. >> $LogDatei
echo `date '+%d.%m.%y %T'`: Die TempStartZeit beträgt $TempStartZeit. >> $LogDatei
fi
fi
Weis jemand wie ich den Inhalt einer Datei in eine Variable bekomme?
An der Selle:
if [ $TempStartZeit <= 0 ]
hängts auch noch.
Es soll überprüft werden ob die TempStartZeit Variabel <= 0 ist.
An der Selle:
if [ $TempAWatchdogDatei = $TempWatchdogDatei ]
hängts auch noch.
Es soll überprüft werden ob die zwei Text Variablen gleich sind.
mfg
Klaus D.