Re: Zeitumstellung klappt nicht
Hallo!
Da wenigstens einer das gleiche Problem hatte wie ich, nochmal zum Abschluß:
In /etc/default/rcS wird angegeben, in welcher Zeitzone sich die
hardware-uhr befindet:
A) UTC=yes : BIOS-Uhr läuft nach UTC
B) UTC=no : BIOS-Uhr läuft nach lokaler Zeit
Probleme können auftreten, wenn die Zeitzone wechselt, ohne dass der
Computer bewegt wird. Beispiel: Umstellung von Sommer- (CEST) auf
Winterzeit (CET). Während der Umstellung kann der Computer entweder
1) in Betrieb sein
2) oder nicht.
Die Fälle A1 und A2 sind einfach:
---------------------------------
On Mon, 2004-11-01 at 01:54:21 +0100, Bertram Scharpf wrote:
>
> Ich habe hier 2 Debian-Rechner. Auf UTC. Einer lief durch,
> der andere war aus. Beide zeigen heute die richtige Zeit.
> Der durchlaufende ruft jede Nacht um 2:45 Uhr E-Mail ab;
> letzte Nacht war er laut `/var/log/messages' zweimal
> eingewählt.
Klar, die Stunde gibt's zweimal: einmal CEST und einmal CET. Bleibt
zu fragen: wird dann vom Wechsel von 2:00 CET nach 3:00 CEST keine
Post abgeholt? Egal, der Blödsinn mit der Sommerzeit bleibt uns noch
länger erhalten ;-)
Im Fall B1 gilt A1 entsprechend.
Für Fall B2 habe ich einen Patch(-versuch?) im Anhang, damit das
endlich mal Ende hat.
On Sun, 2004-10-31 at 21:01:45 +0100, Dirk Salva wrote:
>
> ROTFL. Nix funktioniert da richtig;-( Bei der letzten (nicht gestern)
> Zeitumstellung habe ich das leider erfahren muessen:
> Auf meinem Server laeuft chrony. Der Server laeuft auf UTC. ABER:
> wenn der Rechner zur Zeitumstellung nachts um 2 nicht laeuft, wird da
> nix verstellt, wenn man ihn am anderen Morgen einschaltet.
Weil die BIOS-Uhr keine Ahnung von Zeitzonen hat. Sobald
/usr/share/zoneinfo verfügbar ist, ändert sich die Zeitzone, aber
nicht die Stunde!
> Dann
> versucht chrony wie bloede, die Zeitdifferenz haeppchenweise
> auszugleichen, was natuerlich voelliger Muell ist. Gestern hab ich
> den Rechner einfach mal durchlaufen lassen, da gehts dann ploetzlich.
Das problem der doppelten Stunde, die für den Computer 1 sein sollte,
hab ich hier nicht berücksichtigt.
Weitermachen, solang's Spaß macht.
Günter
------------------------------------------------------------------------
*** /etc/init.d/hwclock.sh.200 Sat Feb 2 21:27:29 2002
--- /etc/init.d/hwclock.sh Wed Nov 3 12:45:09 2004
***************
*** 2,10 ****
--- 2,13 ----
# hwclock.sh Set and adjust the CMOS clock, according to the UTC
# setting in /etc/default/rcS (see also rcS(5)).
#
+ # Version: @(#)hwclock.sh 2.01 2004-10-03 gknab@asamnet.de
# Version: @(#)hwclock.sh 2.00 14-Dec-1998 miquels@cistron.nl
#
# Patches:
+ # 2004-10-02 Günter Knab <gknab@asamnet.de>
+ # - /etc/adjtzone saves timezone between reboots
# 2000-01-30 Henrique M. Holschuh <hmh@rcm.org.br>
# - Minor cosmetic changes in an attempt to help new
# users notice something IS changing their clocks
***************
*** 30,41 ****
--- 33,60 ----
*) echo "$0: unknown BADYEAR setting: \"$BADYEAR\"" >&2 ;;
esac
+ # write the current (RFC-822 style numeric) timezone as offset to UTC
+ # with '/bin/date +%z' (a nonstandard extension).
+ # Version: date (GNU sh-utils) 2.0.11
+ get_timezone () {
+ if [ "$UTC" = yes ]
+ then
+ echo +0000
+ else
+ date +%z
+ fi
+ }
+
case "$1" in
start)
if [ ! -f /etc/adjtime ]
then
echo "0.0 0 0.0" > /etc/adjtime
fi
+ if [ ! -f /etc/adjtzone ]
+ then
+ get_timezone > /etc/adjtzone
+ fi
# Uncomment the hwclock --adjust line below if you want
# hwclock to try to correct systematic drift errors in the
***************
*** 64,69 ****
--- 83,120 ----
echo
echo "Setting the System Clock using the Hardware Clock as reference..."
fi
+
+ # check wether timezone has changed, assuming:
+ # - hwclockfirst.sh has set sysclock assuming last tz
+ # - now /usr/share/zoneinfo is available, we are able to
+ # check wether daylight savings comes into effect during
+ # offtime
+ #
+ LAST_TZ=`cat /etc/adjtzone`
+ CUR_TZ=`date +%z`
+ if [ "$LAST_TZ" -ne "$CUR_TZ" ]
+ then
+ if [ "$VERBOSE" != no ]
+ then
+ echo "Timezone changed from $LAST_TZ to $CUR_TZ." >&2
+ fi
+ # bash interprets '+0100' and '+0200' as octal !!!
+ case $(($CUR_TZ - $LAST_TZ)) in
+ -64) NEW_HOUR=$(( $(date +%H)-1 )) ;;
+ 64) NEW_HOUR=$(( $(date +%H)+1 )) ;;
+ *) NEW_HOUR=$(date +%H)
+ echo "Timezones doesn't differ exactly 1 hour." >&2
+ ;;
+ esac
+ if [ "$HWCLOCKACCESS" != no ]
+ then
+ hwclock --set --date="$NEW_HOUR:$(date +%M:%S)" $GMT $BADYEAR
+ fi
+ # reset systematic clock drift
+ echo "0.0 0 0.0" > /etc/adjtime
+ get_timezone > /etc/adjtzone
+ fi
+
# Copies Hardware Clock time to System Clock using the correct
# timezone for hardware clocks in local time, and sets kernel
# timezone. DO NOT REMOVE.
***************
*** 98,106 ****
--- 149,159 ----
then
hwclock --systohc $GMT $BADYEAR
fi
+ get_timezone > /etc/adjtzone
if [ "$VERBOSE" != no ]
then
echo "Hardware Clock updated to `date`."
+ echo "Saved timezone is UTC`get_timezone`."
fi
;;
show)
***************
*** 108,119 ****
then
hwclock --show $GMT $BADYEAR
fi
;;
*)
echo "Usage: hwclock.sh {start|stop|reload|force-reload|show}" >&2
echo " start sets kernel (system) clock from hardware (RTC) clock" >&2
! echo " stop and reload set hardware (RTC) clock from kernel (system) clock" >&2
exit 1
;;
esac
--- 161,177 ----
then
hwclock --show $GMT $BADYEAR
fi
+ get_timezone
;;
*)
echo "Usage: hwclock.sh {start|stop|reload|force-reload|show}" >&2
echo " start sets kernel (system) clock from hardware (RTC) clock" >&2
! echo " stop and reload set hardware (RTC) clock from kernel (system) clock" >&2
exit 1
;;
esac
+
+
+
+
Reply to: