[Eisfair] dyndnsautologin 1.0.0 released

Marcus Roeckrath marcus.roeckrath at gmx.de
Do Jul 25 23:16:55 CEST 2013


Hallo Olaf,

Olaf Jaehrling wrote:

> ich habe nun noch die Fehler im Dropdown und beim Mailversand gefixt,
> sowie die Doku auf den aktuellen Stand gebraucht.

Du hast in der Berechnung des neuen Ausführungstages noch einen logischen
Fehler, der dazu führt, dass es immer auf dem letzten Tag des Monats
kumuliert.

Du addierst eine Zufallszahl zwischen 1 und 6. Wenn das zum heutigen Tag
addiert größer als der höchste Tag des Monats ist, setzt Du das Datum auf
den höchsten Tag des Monats.

Das muss somit am gegen Ende des Monats zwingend einen cron-Eintrag mit dem
letzten Tag des Monats ergeben. Ist der letzte Tag de Monats erreicht,
kommt zwangsläufig wieder derselbe Tag für die nächste Ausführung raus.

Liegt nun der Zeitstempel dieser "nächsten" Ausführung vor der aktuellen
Zeit, wird der Job erst in 2 Monaten wieder ausgeführt - angenommen es ist
Mai, dann erst wieder im Juli, denn dann wird erst wieder ein 31. erreicht.

Liegt der Zeitstempel jedoch nach der aktuellen Zeit, wird der Job am
gleichen Tag nochmal ausgeführt und das Spiel beginnt von vorne, wieder mit
dem gleichen letzten Monatstag.

Du musst über die Monatsgrenzen hinwegspringen, vielleicht so:

[Auszug aus DeinemInitscript]

# Die Addition von 1 zum Random-Ergenis liefert eine Zufallszahl ab 1,
# spart Dir die Prüfung,ob das Würfeln 0 ergeben hat und ein
# erneuten Würfeln kann ja wieder 0 liefern, was Du aber dann nicht mehr
# prüfst.
# Ich würde hier sogar statt 7 eine größere Bandbreite z. B. 14 oder 20
# ansetzen, damit es nicht auffällig oft gemacht wird.
#    MOD=`echo $(($RANDOM % 20 + 1 ))`
    MOD=`echo $(($RANDOM % 7 + 1 ))`
    TODAY=`date +%d`
    MOD=`echo "$MOD + $TODAY" | bc -l`
    echo $MOD
    if [ "$MOD " -gt "$TODAY_MAX" ]
    then
      MOD=`echo "$MOD - $TODAY_MAX" | bc -l`
    fi
    DYNDNSAUTOLOGIN_CRON="$FIRST $MOD * *"

-- 
Gruss Marcus


Mehr Informationen über die Mailingliste Eisfair