При выключении или перезагрузке компьютера текущее время не записывается в RTC. При этом такая команда # /etc/rc.d/init.d/clock sync работает. На мой взгляд, виновата эта строка в /etc/rc.d/init.d/clock для stop: if is_yes "$HWCLOCK_SET_AT_HALT" && clock_unsynced; then По-моему, проверка clock_unsynced должна быть инвертирована. Во всяком случае, я не понимаю, зачем надо записывать в RTC несинхронизированное время. В исходниках ядра (kernel/time/ntp.c) вроде бы такая же позиция. Информация о системе: startup-0.9.8.31-alt1 $ egrep -v '^(#|$)' /etc/sysconfig/clock HWCLOCK_SET_TIME_AT_START=true HWCLOCK_SET_AT_HALT=true HWCLOCK_ADJUST=false UTC=true ZONE=Europe/Moscow Время синхронизируется при помощи ntp: $ /usr/sbin/ntpq -nc rv assID=0 status=0684 leap_none, sync_ntp, 8 events, event_peer/strat_chg, version="ntpd 4.2.4p7@1.1607 Tue May 19 14:54:01 UTC 2009 (1)", processor="i686", system="Linux/3.1.5-un-def-alt0.M60P.1", leap=00, stratum=2, precision=-20, rootdelay=7.316, rootdispersion=42.341, peer=19195, refid=195.2.64.5, reftime=d299c9d0.dceaebad Mon, Dec 19 2011 18:33:52.862, poll=10, clock=d299ce50.79c52abe Mon, Dec 19 2011 18:53:04.475, state=4, offset=-3.215, frequency=-29.903, jitter=1.262, noise=1.239, stability=0.130 $ /bin/clock_unsynced ; echo $? 1 На Сизифе должно быть то же самое, т.к. startup и clock_unsynced.c такие же.
clock_unsynced возвращает EXIT_SUCCESS если и только если adjtimex(2) возвращает статус STA_UNSYNC. По идее, только в этом случае время нужно синхронизировать вручную. Что у вас, кстати, показывает $ strace -eadjtimex clock_unsynced
(В ответ на комментарий №1) > clock_unsynced возвращает EXIT_SUCCESS если и только если adjtimex(2) > возвращает статус STA_UNSYNC. По идее, только в этом случае время нужно > синхронизировать вручную. То есть это именно так и задумано? Только несинхронизированное системное время может быть записано в RTC при выключении? Предполагается, что синхронизированное время и так периодически записывается в RTC, как сказано в документации ядра (rtc.txt)? На указанной машине время почти всегда синхронизировано через NTP, но в RTC ничего не менялось. Поэтому и возник этот баг. Или ядро пишет в RTC только минуты и секунды? (встретил такое на сайте ntp.org, код не смотрел) > Что у вас, кстати, показывает > $ strace -eadjtimex clock_unsynced adjtimex({modes=0, offset=20914, freq=-1964601, maxerror=179152, esterror=379, status=STA_PLL|0x2000, constant=8, precision=1, tolerance=32768000, time={1326818814, 27600648}, tick=10000, ppsfreq=0, jitter=0, shift=0, stabil=0, jitcnt=0, calcnt=0, errcnt=0, stbcnt=0}) = 0 (TIME_OK) +++ exited with 1 +++
(In reply to comment #2) > (В ответ на комментарий №1) > > clock_unsynced возвращает EXIT_SUCCESS если и только если adjtimex(2) > > возвращает статус STA_UNSYNC. По идее, только в этом случае время нужно > > синхронизировать вручную. > > То есть это именно так и задумано? > Только несинхронизированное системное время может быть записано в RTC при > выключении? > Предполагается, что синхронизированное время и так периодически записывается в > RTC, как сказано в документации ядра (rtc.txt)? Да, в то время, когда был реализован нынешний механизм с clock_unsynced, ядро именно так себя и вело: если ntpd снимал флаг STA_UNSYNC, то ядро само периодически синхронизировало системное время с RTC. > На указанной машине время почти всегда синхронизировано через NTP, но в RTC > ничего не менялось. Поэтому и возник этот баг. > Или ядро пишет в RTC только минуты и секунды? (встретил такое на сайте ntp.org, > код не смотрел) Надо проверить, не случилось ли в ядре радикального изменения поведения в этой ситуации. > > Что у вас, кстати, показывает > > $ strace -eadjtimex clock_unsynced > > adjtimex({modes=0, offset=20914, freq=-1964601, maxerror=179152, esterror=379, > status=STA_PLL|0x2000, constant=8, precision=1, tolerance=32768000, > time={1326818814, 27600648}, tick=10000, ppsfreq=0, jitter=0, shift=0, > stabil=0, jitcnt=0, calcnt=0, errcnt=0, stbcnt=0}) = 0 (TIME_OK) > +++ exited with 1 +++ STA_PLL|STA_NANO, вроде бы ничего особенного.