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