PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Cronmanager



Danjel4u
19.09.13, 15:11
ich lass im Cronmanager ein Script jede Stunde prüfen.

Es wird nach ein bestimmten Update geprüft, ist ein Update vorhanden wird eine abfrage gemacht ob Update starten soll oder später erinnert werden soll.

So, um 11 Uhr wurde angezeigt das ein Update vorhanden ist starte ich oder lass mich später erinnern. Wenn ich aber jetzt keine Eingabe mache weil ich nicht zu Hause bin, wird um 12 Uhr das Script über Cron nochmal gestartet und ich habe eine doppel anfrage.

Ich habe mir gedacht ich lass im Update Script mit "/etc/init.d/cron stop" cron stoppen und am Ende wieder starten. Gibt es auch eine andere Möglichkeit?

pibi
19.09.13, 15:36
ich lass im Cronmanager ein Script jede Stunde prüfen.Du meinst wahrscheinlich "cron".
Es wird nach ein bestimmten Update geprüft, ist ein Update vorhanden wird eine abfrage gemacht ob Update starten soll oder später erinnert werden soll.Wie ist der Inhalt dieses Scripts? Und wie ist der Output von "crontab -l" (kleines "L" am Schluss)?
Wenn ich aber jetzt keine Eingabe mache weil ich nicht zu Hause bin, wird um 12 Uhr das Script über Cron nochmal gestartet und ich habe eine doppel anfrage.Natuerlich, denn das Script laeuft ja jede Stunde.
Ich habe mir gedacht ich lass im Update Script mit "/etc/init.d/cron stop" cron stoppen und am Ende wieder starten.Das ist eine ganz schlechte Idee, denn der cron handelt noch viele andere Jobs ab.

Gruss Pit.

Danjel4u
19.09.13, 16:09
crontab -l


0 * * * * root /usr/script/cron_bq.sh



#!/bin/sh
#
# Pruefung ob Bouquets Update vorhanden als Cron. Version 2.0
# Script fragt einmal ob Updatet erwuenscht, wenn Nein dann erst wieder wenn Update vorhanden.
#
# Enigma Version ("enigma1" oder "enigma2").


# Die SERVERurl auf die Adresse eures Webservers umändern, wo die gepackte Bouquets Datei liegt
SERVERurl="ftp://192.168.11.3"


# Der Port eures Webservers (standard: 80)
SERVERport="21"


# Das Verzeichnis in dem die Bouquets Datei auf dem Webserver liegt
SERVERdir="hotbird_e2"


# Benutzername zum Zugriff auf den Webserver (leer lassen falls nicht vorhanden)
USERNAME="dream"


# Password zum Zugriff auf den Webserver (leer lassen falls nicht vorhanden)
PASSWORD="0000"

# timelu.txt auf Dreambox
timelu="timelu.txt"


# Datei mit der Zeit des letzten Updates die vom Server geladen wird
ST="time.txt"


# Ob eine Ausgabe bei Kein Update und Fehlern gemacht werden soll 0 = Nein , 1 = Ja
AUSGABE="0"


# Ob VPN benutzt werden 0 = Nein , 1 = Ja
VPN="1"


# Update Script Ordner und Datei
get_bqdir="/usr/script"
get_bqfile="get_bq.sh"


#
## Ende der Konfiguration
#


vpnup() {
/usr/script/vpn.sh start & sleep 50
}


vpndown() {
echo "VPN Verbindung wird abgebaut"
/usr/script/vpn.sh stop & sleep 5
}


#VPN Verbindung wird aufgebaut
if [ "$VPN" = 1 ]; then
vpnup
fi

#prepare url
case $SERVERurl in
[hH][tT][tT][pP]*|[fF][tT][pP]*)
URLprot="$(echo $SERVERurl | cut -d ":" -f 1)://"
URL=$(echo $SERVERurl | cut -d ":" -f 2 | tr -d "//")
;;
*)
URL=$SERVERurl
;;
esac
if [ ! -z "$USERNAME" ]; then
if [ -z "$PASSWORD" ]; then
_error 1 "Die Script Einstellung USERNAME ist gesetzt aber PASSWORD ist leer!"
fi
URL="$USERNAME:$PASSWORD@$URL"
fi
[ ! -z "$SERVERport" ] && URL="$URL:$SERVERport"
[ ! -z "$URLprot" ] && URL=$URLprot$URL


TEMPdir=/tmp
WGETo="-q"


# functions
#aufräumen
_cleanup() {
rm -r $TEMPdir/$ST
}


# error handling
_error() {
if [ $1 -gt 0 ]; then
[ -z "$2" ] && message="Es ist ein Fehler aufgetreten" || message=$2
echo "$message"
echo "Abbruch"
if [ "$AUSGABE" = 1 ]; then
#Bildschirmnachricht bei ein Fehler
wget -O /dev/null "http://localhost:80/web/message?text=Verbindung%20wird%20beendet%20wegen%2 0eines%20Fehlers!&type=1&timeout=20"
else
echo ""
fi
#VPN Verbindung wegen eines Fehlers abbauen
if [ "$VPN" = 1 ]; then
vpndown
fi

exit 1
fi
}


#downloaden von time.txt
downtimetxt() {
#Downloaden von time.txt vom Server
wget $WGETo $URL/$SERVERdir/$ST
_error $? "Es ist ein Fehler aufgetreten (download $ST)"

#prüfen ob download erfolgreich
if [ ! -f "$TEMPdir/$ST" ]; then
_error 1 "Es ist ein Fehlr aufgetreten (download $ST)"
fi
}


#Speichern der time.txt-variable in /etc/timeluCron_bq.txt
savetimetxt() {
cp -r $TEMPdir/$ST /etc/timeluCron_bq.txt
}


echo "Pruefe ob ein Update der Bouquets vorhanden ist.."
cd $TEMPdir


#prüfen ob das script schon mal genutzt wurde und /etc/timeluCron_bq.txt überhaupt vorhanden ist
if [ -f "/etc/timeluCron_bq.txt" ]; then


#vor dem download sicherstellen das die datei nicht vorhanden ist
_cleanup

#download von time.txt vom Server
downtimetxt

#savetimetxt speichert timen in /etc/timeCron_bq.txt
savetimetxt


#Speichern des Inhalts von vorhanden timelu.txt in einer Variablen
timelu1=$(cat /etc/timeluCron_bq.txt | head -n1 | tail -n1)
timelu2=$(cat /etc/timeluCron2_bq.txt | head -n1 | tail -n1)
if [ $timelu2 -lt $timelu1 ]; then

wget -O /dev/null "http://localhost:80/web/message?text=Eine%20neu%20Senderlisten%20steht%20z um%20Update%20bereit!%20Soll%20Update%20gestartet% 20werden?&type=0"
wget -O /dev/null "http://localhost:80/web/remotecontrol?command=108"
while [ -z "$answer" ]; do
answer=$(wget -O - 'http://localhost:80/web/messageanswer?getanswer=now' | egrep -o 'YES|NO')
sleep 1
done
if [ "$answer" = YES ];then
wget -O /dev/null "http://localhost:80/web/message?text=Update%20gestartet!%20Kann%20mehrer%2 0Minuten%20dauern!&type=1&timeout=10"
$get_bqdir/$get_bqfile
else
wget -O /dev/null "http://localhost:80/web/message?text=Willst%20du%20zum%20aktuellen%20Updat e%20nochmal%20erinnert%20werden?%20Update%20kann%2 0auch%20manuell%20über%20Blaue%20Taste%20>%20Download-Senderliste%20gestartet%20werden!&type=0"
while [ -z "$answer2" ]; do
answer2=$(wget -O - 'http://localhost:80/web/messageanswer?getanswer=now' | egrep -o 'YES|NO')
sleep 1
done
if [ "$answer2" = NO ];then
cp -r /etc/timeluCron_bq.txt /etc/timeluCron2_bq.txt
else
rm -r /etc/timeluCron_bq.txt
rm -r /etc/timeluCron2_bq.txt

fi
#VPN Verbindung wird aufgebaut
if [ "$VPN" = 1 ]; then
vpndown
fi
fi
else
echo "Es ist kein Update vorhanden!"
if [ "$AUSGABE" = 1 ]; then
#Bildschirmnachricht für kein Update vorhanden
wget -O /dev/null "http://localhost:80/web/message?text=Es%20ist%20kein%20Update%20vorhanden!&type=1&timeout=20"
fi
#VPN Verbindung wird aufgebaut
if [ "$VPN" = 1 ]; then
vpndown
fi
fi
else

wget -O /dev/null "http://localhost:80/web/message?text=Eine%20neu%20Senderlisten%20steht%20z um%20Update%20bereit!%20Soll%20Update%20gestartet% 20werden?&type=0"
wget -O /dev/null "http://localhost:80/web/remotecontrol?command=108"
while [ -z "$answer" ]; do
answer=$(wget -O - 'http://localhost:80/web/messageanswer?getanswer=now' | egrep -o 'YES|NO')
sleep 1
done
if [ "$answer" = YES ];then
wget -O /dev/null "http://localhost:80/web/message?text=Update%20gestartet!%20Kann%20mehrer%2 0Minuten%20dauern!&type=1&timeout=10"
_cleanup
downtimetxt
savetimetxt
$get_bqdir/$get_bqfile
else
wget -O /dev/null "http://localhost:80/web/message?text=Willst%20du%20zum%20aktuellen%20Updat e%20nochmal%20erinnert%20werden?%20Update%20kann%2 0auch%20manuell%20über%20Blaue%20Taste%20>%20Download-Senderliste%20gestartet%20werden!&type=0"
while [ -z "$answer2" ]; do
answer2=$(wget -O - 'http://localhost:80/web/messageanswer?getanswer=now' | egrep -o 'YES|NO')
sleep 1
done
if [ "$answer2" = NO ];then
_cleanup
downtimetxt
savetimetxt
cp -r $TEMPdir/$ST /etc/timeluCron2_bq.txt
fi
#VPN Verbindung wird aufgebaut
if [ "$VPN" = 1 ]; then
vpndown
fi
fi
fi


exit 0

karl-heinz-lnx
21.09.13, 00:34
Hallo,
ich würde in Deinem Skript eine Anpassung machen. Hier solltest Du zu Beginn eine Datei anlegen, die prüft ob Dein Skript läuft. Sollte die Datei existieren, Skript beenden, ansonsten alles so durchführen wie bisher. Zum Schluss dann nur noch die Datei löschen, die man angelegt an.

Danjel4u
21.09.13, 01:12
Wie macht man sowas? Hab mir immer andere Scripte angesehen und das dann um geschrieben auf meine.

karl-heinz-lnx
21.09.13, 20:28
Kleine Änderung, ich wurde auf die ProzessID prüfen und das wie folgt machen. Das ganze als Pseudo Code, da ich akuell vor einem OS sitze, dessen Namen nicht genannt werden will und keine Bash existiert ;):



Falls ( Datei existiert) {
# Prüfe, ob PID OK
Falls ( $PID aus Datei existiert ) {
# alles OK, mache nichts und gebe entsprechenden Returncode aus
exit 1;
}
sonst {
# lösche Datei - sollte eigentlich nicht vorkommen
rm Datei
}
# Datei existiert nicht
Erstelle Datei mit $PID
Dein Skript
Lösche Datei