Settime ändert die Zeit beim shutdown 2mal!

  • Moin ich habe ein Problem mit settime.


    Wenn ich den Rechner mit den Powerknopf ausschalte ändert er das Datum erst richtig um, das heißt wenn in 4 Stunden eine Aufnahme anliegt stellt er das Datum auf den 31.05 19.59.59. Nur zwei Sekunden später scheint er die Zeit noch mal um den selben Wert zurückzustellen, dann erscheint auf mein Display auf einmal 10. Juni. Wenn der Rechner wieder Hochfährt läuft correcttime.sh einmal durch und der VDR zeigt mir das Datum 31.05. an.


    Also kurz gesagt scheint er beim runterfahren den Zeitwert zweimal zu ändern. Merkwürdig ist nur das settime schon länger ohne Probleme lief. Geändert habe ich an der Hardware nur den Prozessor, und das mein VDR jetzt über eine CF-Karte bootet und sich die Daten übers Netz holt.


    Ich finde zur Zeit leider den Fehler nicht vielleicht hat von euch ja jemand eine Idee.


    mfg
    Azuver


    Anbei meine settime.sh , poweroff.pl und rcShutdown


    Settime.sh


    #!/bin/bash


    # Der Wakeup-Zeitpunkt im BIOS muss auf den 1. des Monats um 00:00:00 Uhr
    # eingestellt werden
    BiosWakeup="2004-05-31 23:59:59"


    # Aufwachzeit in Sekunden seit Epoch umrechnen
    Wakeup=`date -d "$1" +%s`


    if [ "$?" -eq "1" ]; then
    echo "No date or wrong date format."
    echo "Syntax:"
    echo " settime \"YYYY-MM-DD hh:mm:ss\""
    exit 1
    fi


    Now=`date +%s`
    Bios=`date -d "${BiosWakeup}" +%s`


    if [ "${Wakeup}" -lt "${Now}" ]; then
    echo "Wakup Time is in past."
    exit 1
    fi


    # Zeitdifferenz zwischen Wakeup und aktueller Zeit in Sekunden ausrechnen
    Diff=$[${Wakeup}-${Now}]


    # Zeitdifferenz zwischen BiosWakeup und jetzt in Sekunden in Datei speichern
    echo "$[${Now}-${Bios}+${Diff}]" > /etc/timediff


    # Uhr zurück stellen
    date -s "${BiosWakeup} ${Diff} seconds ago" >/dev/null


    if [ "$?" -gt "0" ]; then
    echo "Can't change system date, not running as root?"
    exit 1
    fi


    # CMOS-Uhr aktualisieren
    hwclock -w --noadjfile –localtime



    poweroff.pl
    #!/usr/bin/perl


    ##
    # by Thomas Koch <tom@linvdr.org>
    ##
    use POSIX qw(strftime sprintf);
    use Time::Local;


    my $PROC_ALARM = "/proc/acpi/alarm";
    my $SETTIME = "/usr/bin/settime.sh";
    my $DEBUG = 0;
    my $WAKEUP_MARGIN = 5;
    my $TWOOCLOCK = 0;
    my $METHOD = 1; # 0 = ACPI-Wakeup, 1 = settime


    sub true() { 1; }
    sub false() { 0; }


    sub dprint {
    $_ = join("", @_);
    chomp;
    print "$_\n" if($DEBUG);
    }


    sub setTime {
    system("hwclock -w");
    #system("hwclock -w --directisa");
    }


    sub setAlarm {
    my $Next = shift;
    my $TwoOclock = NextTwoOclock();
    my $NextStart;
    my $ShouldStart;
    setTime();

    if($Next) {
    if($Next > $TwoOclock) {
    $ShouldStart = true;
    }
    $NextStart = $Next - ($WAKEUP_MARGIN * 60);
    dprint("Next event at ", strftime("%d.%m.%Y %H:%M", localtime($Next)));
    } else {
    $ShouldStart = true;
    }


    if($TWOOCLOCK && $ShouldStart) {
    $NextStart = $TwoOclock;
    }

    if($NextStart) {
    dprint("Programming wakeup at ", strftime("%d.%m.%Y %H:%M:%S", localtime($NextStart)));
    if($METHOD == 0) {
    if(-e $PROC_ALARM) {
    system(sprintf("echo \"%s\" > %s", strftime("%Y-%m-%d %H:%M", localtime($NextStart)), $PROC_ALARM));
    } else {
    dprint("$PROC_ALARM does not exist");
    }
    } else {
    if(-e $SETTIME) {
    system(sprintf("%s \"%s\"", $SETTIME, strftime("%Y-%m-%d %H:%M:00", localtime($NextStart))));
    } else {
    dprint("$SETTIME does not exist");
    }
    }
    }
    }


    sub PowerOff {
    system("/bin/busybox poweroff") if(!$DEBUG);
    }


    sub NextTwoOclock {
    my $now = time();
    # Array-Format: ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
    my @today = localtime($now);
    @today[0..2] = (0, 0, 2);


    # get today 2:00 in seconds since epoc
    my $TwoOclock = timelocal(@today);

    # Check: Is today 2:00 in future or past?
    if($now < $TwoOclock) {
    # Today two oclock is in future
    return $TwoOclock;
    } else {
    # We're past two oclock, next two oclock is tomorrow (+86400s)
    return $TwoOclock+86400;
    }
    }


    if(scalar(@ARGV)) {
    # called from vdr
    die "Wrong parameter count\n" if(scalar(@ARGV) != 5);
    die "$PROC_ALARM missing" if(!-e $PROC_ALARM);


    my($Next, $Delta, $Channel, $Recording, $UserShutdown) = @ARGV;

    setAlarm($Next);
    PowerOff();
    } else {
    # called from cmdline
    $next = `svdrpsend.pl next abs`;
    if($next =~ /550 No active timers/) {
    setAlarm(0);
    PowerOff();
    } elsif($next =~ /250 \d+ (\d+)/) {
    setAlarm($1);
    PowerOff();
    } else {
    PowerOff();
    }
    }



    rcShutdown


    #!/bin/bash
    ROOTDISK=/dev/hda1


    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    export PATH


    killall() {
    SIG=$1
    shift
    kill $SIG $@ 2>/dev/null
    }


    # VDR stoppen
    /etc/init.d/runvdr stop
    sleep 1
    killall -9 vdr >/dev/null 2>/dev/null
    #sleep 1
    #/etc/init.d/runvdr unloaddriver


    rm -fr /var/cache/ramdisk/* 2>/dev/null
    rm -fr /vtx/* 2>/dev/null
    cp -a /ramdisk/* /var/cache/ramdisk


    # Vorgezogener fsck, falls ein fsck innerhalb der nächsten 24h ansteht
    RunFsck="false";
    NextFsck=`tune2fs -l /dev/hda1 | grep "Next check after" | cut -d":" -f2-`
    if [ `date -d "$NextFsck" +%s` -lt $[`date +%s`+86400] ]; then
    /etc/init.d/runvdr loaddriver
    RunFsck="true";
    fi


    #
    OURPID=$$
    INITPID=`ps -C init -o "%p" | tail -n 1`
    PIDS=`ps axo "%p" | tac | grep -vw PID | grep -vw 1 | grep -vw $INITPID | grep -vw $OURPID`


    killall -15 $PIDS
    sleep 1
    killall -9 $PIDS
    sleep 1


    #swapoff -a
    umount -a -r


    # run fsck?
    if [ $RunFsck == "true" ]; then
    touch /etc/mtab
    if [ $? -eq 0 ]; then
    echo "root fs still mountet, skipping fsck!"
    else
    echo "Running fsck in advance"
    stillimage 0 /usr/lib/vdr/stillimages/fsck-shutdown.mpg &
    STPID=$!
    fsck -y -f $ROOTDISK
    echo "fsck done"
    fi
    else
    echo "No fsck needed" >/dev/tty1
    fi
    kill -9 $STPID 2>/dev/null

    VDR: Selbstbaugehäuse, H61M/U3S3 + G530, 4 GB Ram, Nvidia G210, LG 6,4 TFT per VGA, TBS 6981 + CT-3650 USB , IR-Einschalter, yavdr, mit 1920x1080_50 an 40er Samsung LCD

  • Zitat

    ich schätze du hast das gleiche Problem wie ich (hatte).


    Nein, hat er nicht. Das geht auch aus der Beschreibung hervor.


    Viele Grüße, Mirko

  • Super deine Lösung scheint nach ersten Tests zu funktionieren. Ich habe diesen Beitrag zwar gelesen aber daraus nur das rumspielen mit den Sleep Werten übernommen. Jetzt nachdem ich deine komplette Anpassung übernommen habe, funzt es.


    Danke azuver

    VDR: Selbstbaugehäuse, H61M/U3S3 + G530, 4 GB Ram, Nvidia G210, LG 6,4 TFT per VGA, TBS 6981 + CT-3650 USB , IR-Einschalter, yavdr, mit 1920x1080_50 an 40er Samsung LCD

  • Ne cooper da hast du Recht ich hatte ein anderes Problem, aber mit seiner Lösung klapt es auch. Obwohl ich nicht verstehe warum ich auf einmal dieses Problem hatte, da ich nur den Prozessor getauscht habe.

    VDR: Selbstbaugehäuse, H61M/U3S3 + G530, 4 GB Ram, Nvidia G210, LG 6,4 TFT per VGA, TBS 6981 + CT-3650 USB , IR-Einschalter, yavdr, mit 1920x1080_50 an 40er Samsung LCD

  • Hallo Leute,


    ich habe mittlerweile auch den oben genannten Lösungvorschlag (findus) übernommen, bei mir jedoch ohne Erfolg. Was mich am unten angehängten Logfile etwas wundert, ist das nachdem die System Time richtig gesetzt wurde (also auf den 31 Mai) kurz drauf wieder auf das momentan gültige Datum geschwenkt wird. Ist das normal?


    Vielleicht kann ja mal einer ein Logfile pasten das eine funktionierende "settime" Config wiedergibt.


    Logfile Auszug ->
    #######################


    Jun 8 15:26:34 argus user.info vdr[3328]: confirmed
    Jun 8 15:26:34 argus user.info vdr[3328]: executing '/usr/bin/poweroff.pl 1118238300 1106 1 "Fliege - Die Talkshow" 1'
    May 31 23:46:34 argus daemon.info init: ^MStarting pid 3418, console /dev/console: '/etc/init.d/rcShutdown'
    May 31 23:46:34 argus user.debug vdr[3328]: max. latency time 12 seconds
    May 31 23:46:34 argus user.info vdr[3328]: closing SVDRP connection
    May 31 23:46:35 argus user.info vdr[3328]: caught signal 15
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: wetter
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: timeline
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: text2skin
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: streamdev-server
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: osdpip
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: mplayer
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: mp3
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: image
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: dvdselect
    May 31 23:46:35 argus user.info vdr[3328]: stopping plugin: dvd
    May 31 23:46:35 argus user.info vdr[3346]: System Time = Mon May 31 23:46:35 2004 (1086039995)
    May 31 23:46:35 argus user.info vdr[3346]: Local Time = Wed Jun 8 15:26:36 2005 (1118237196)

    Jun 8 15:26:36 argus user.err vdr[3328]: ERROR: thread 7176 won't end (waited 3 seconds) - canceling it...
    Jun 8 15:26:36 argus user.info vdr[3328]: saved setup to /etc/vdr/setup.conf
    Jun 8 15:26:36 argus user.debug vdr[3345]: tuner on device 1 thread ended (pid=3345, tid=1026)
    Jun 8 15:26:36 argus user.debug vdr[3346]: Section handler thread ended (pid=3346, tid=2051)
    Jun 8 15:26:36 argus user.debug vdr[3348]: tuner on device 2 thread ended (pid=3348, tid=3076)
    Jun 8 15:26:36 argus user.debug vdr[3349]: Section handler thread ended (pid=3349, tid=4101)
    Jun 8 15:26:36 argus user.info vdr[3328]: deleting plugin: wetter
    Jun 8 15:26:36 argus user.info vdr[3328]: deleting plugin: timeline
    Jun 8 15:26:36 argus user.info vdr[3328]: deleting plugin: text2skin
    Jun 8 15:26:36 argus user.info vdr[3328]: deleting plugin: streamdev-server
    Jun 8 15:26:38 argus user.warn kernel: saa7146: unregister extension 'budget dvb /w video in'.
    Jun 8 15:26:38 argus user.warn kernel: saa7146: unregister extension 'budget dvb'.
    Jun 8 15:26:39 argus user.err vdr[3328]: ERROR: thread 5126 won't end (waited 3 seconds) - canceling it...
    Jun 8 15:26:39 argus user.info vdr[3328]: deleting plugin: osdpip
    Jun 8 15:26:39 argus user.info vdr[3328]: deleting plugin: mplayer
    Jun 8 15:26:39 argus user.info vdr[3328]: deleting plugin: mp3
    Jun 8 15:26:39 argus user.info vdr[3328]: deleting plugin: image
    Jun 8 15:26:39 argus user.info vdr[3328]: deleting plugin: dvdselect
    Jun 8 15:26:39 argus user.info vdr[3328]: deleting plugin: dvd
    Jun 8 15:26:39 argus user.debug vdr[3328]: =====================
    Jun 8 15:26:39 argus user.debug vdr[3328]: EPG bugfix statistics
    Jun 8 15:26:39 argus user.debug vdr[3328]: =====================
    Jun 8 15:26:39 argus user.debug vdr[3328]: IF SOMEBODY WHO IS IN CHARGE OF THE EPG DATA FOR ONE OF THE LISTED
    Jun 8 15:26:39 argus user.debug vdr[3328]: CHANNELS READS THIS: PLEASE TAKE A LOOK AT THE FUNCTION cEvent::FixEpgBugs()
    Jun 8 15:26:39 argus user.debug vdr[3328]: IN VDR/epg.c TO LEARN WHAT'S WRONG WITH YOUR DATA, AND FIX IT!
    Jun 8 15:26:39 argus user.debug vdr[3328]: =====================
    Jun 8 15:26:39 argus user.debug vdr[3328]: Fix^IHits^IChannels
    Jun 8 15:26:39 argus user.debug vdr[3328]: 0^I50^Ihr-fernsehen, Das Erste, SR Fernsehen Südwest, rbb Berlin, SÜDWEST BW, rbb Brandenburg, ...
    Jun 8 15:26:39 argus user.debug vdr[3328]: 1^I18^IRAI 1, TV 5, TV5 Europe
    Jun 8 15:26:39 argus user.debug vdr[3328]: 2^I105^Irbb Berlin, rbb Brandenburg, ZDFinfokanal, TV 5, TV5 Europe
    Jun 8 15:26:39 argus user.debug vdr[3328]: 3^I716^IPhoenix, KiKa, NDR FS NDS, SAT.1, N24, ProSieben, KABEL1
    Jun 8 15:26:39 argus user.debug vdr[3328]: 4^I23^IDas Erste, Bayerisches FS, EinsMuXx, TV5 Europe, VIVA, TV 5, RAI 1
    Jun 8 15:26:39 argus user.debug vdr[3328]: 5^I11^IKiKa, MDR FERNSEHEN, 3sat, SAT.1, ProSieben
    Jun 8 15:26:39 argus user.debug vdr[3328]: 6^I58^IBayerisches FS, Eurosport, EuroNews, EinsFestival, SÜDWEST RP, N24, TV 5, RAI 1, ...
    Jun 8 15:26:39 argus user.debug vdr[3328]: 7^I1842^ISÜDWEST BW, BR-alpha, Bayerisches FS, hr-fernsehen, WDR Köln, SR Fernsehen Südwest, ...
    Jun 8 15:26:39 argus user.debug vdr[3328]: =====================
    Jun 8 15:26:39 argus user.debug vdr[3328]: max. latency time 12 seconds
    Jun 8 15:26:39 argus user.info vdr[3328]: exiting
    Terminated
    argus:/etc# Connection to argus closed by remote host.


    ##################


    Im BIOS habe ich den Eintrag für den Aufwachzeitpunkt auf den ersten des Monats (Empfehlung in der settime.sh) also auf den 01.06 00:00:00 gesetzt.


    Gruss,
    Florian

  • Moin,


    Problem ist das der ivdr mmer noch läuft obwohl die Zeit schon zurückgestellt ist.


    also ist der sleepwert bei dir noch zu niedrig (der nach killall -9 ...)


    wenn es richtig funktioniert siehst du den 31.05. überhaupt nicht im log.



    Gruß
    findus

    Mein VDR: LinVDR 0.7 + MT, ASROCK K7VM4, Duron 1000@500, 128 MB RAM, Samsung SP1604+SP2014, Medion 4688, TT 1.3 + Skystar 2.6D

  • added crontab entry:


    0 * * * * /usr/bin/rdate timeserver.domain.com


    Stellt alle volle Stunde die Systemzeit nach.
    ntpdate wäre zwar "more sophisticated" aber es geht auch so. Das setzt allerdings einen aktiven / permanenten Internetanschluss voraus.


    Gruss, runvdr

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!