ntpd是否设置硬件时钟?


11

是否ntpd设置硬件时钟?

ntpd如果通过-q选项是否设置硬件时钟(平均一次校正)?

Linux 3.5.6,ntp 4.2.6.p5。

这里写的是ntpd每11分钟将系统时钟同步到硬件一次,但是我在ntpd勒芒中找不到对此的引用。

ntpd 


@卡尔森:好的。如果ntpd 守护程序使内核每11分钟同步一次硬件时钟,那又如何ntpd -q呢?

ntpd跑步吗?
卡森(Karlson)2012年

Answers:


5

Serverfault.com上也提出了类似的问题。这就是答案。

hwclock在RHEL 4.6 的手册页中:

This mode (we'll call it "11 minute mode") is off until something turns it on.  The ntp
daemon  xntpd  is  one thing  that  turns  it on.  You can turn it off by running
anything, including hwclock --hctosys, that sets the System Time the old fashioned way.

To see if it is on or off, use the command adjtimex --print and look at the value of
"status".  If the "64" bit of this number (expressed in binary) equal to 0, 11 minute mode 
is on.  Otherwise, it is off.

因此,借助您的跑步,hwclock --set您可能已将其关闭。同样,您可以检查的输出adjtimex --print以确认。


-1

自己查看(以下脚本几乎实时显示当前的“时间状态”,同时记录值的突然变化)

#!/bin/sh
set -eu

get_time() {
    local line="$1"
    timedatectl \
        | sed -nE $line'p' \
        | sed -E 's/.* ([0-9]+):([0-9]+):([0-9]+).*/\1\2\3/'
}


get_time_status() {
    adjtimex --print \
        | grep -F status \
        | awk '{print "obase=2;" $2}' \
        | bc
}


num_diff() {
    local a="$1" b="$2"
    echo "ah = ${a:0:2}; am = ${a:2:2}; as = ${a:4:2}
        bh = ${b:0:2}; bm = ${b:2:2}; bs = ${b:4:2}
        a = ah * 60 * 60 + am * 60 + as
        b = bh * 60 * 60 + bm * 60 + bs
        if (a > b) a - b else b - a" | bc
}


print_line() {
    local f1="$1" f2="$2"
    printf "%20s %-$(($(tput cols) - 21))s\n" "$f1" "$f2"
}


localt=
universalt=
rtct=
ntp_enabled=
ntp_synchronized=
time_status=

localt_prv="$(get_time 1)"
universalt_prv="$(get_time 2)"
rtct_prv="$(get_time 3)"
ntp_enabled_prv="$(timedatectl | grep -E 'NTP enabled' | awk '{print $3}')"
ntp_synchronized_prv="$(timedatectl | grep -E 'NTP synchronized' | awk '{print $3}')"
time_status_prv="$(get_time_status)"

while true; do
    localt="$(get_time 1)"
    universalt="$(get_time 2)"
    rtct="$(get_time 3)"
    ntp_enabled="$(timedatectl | grep -E 'NTP enabled' | awk '{print $3}')"
    ntp_synchronized="$(timedatectl | grep -E 'NTP synchronized' | awk '{print $3}')"
    time_status="$(get_time_status)"

    if [ "$(num_diff $localt $localt_prv)" -gt 5 ]; then
        print_line "[$(date +%H:%M:%S)]" "localt: $localt_prv -> $localt"
    fi
    if [ "$(num_diff $universalt $universalt_prv)" -gt 5 ]; then
        print_line "[$(date +%H:%M:%S)]" "universalt: $universalt_prv -> $universalt"
    fi
    if [ "$(num_diff $rtct $rtct_prv)" -gt 5 ]; then
        print_line "[$(date +%H:%M:%S)]" "rtct: $rtct_prv -> $rtct"
    fi
    if [ "$ntp_enabled" != "$ntp_enabled_prv" ]; then
        print_line "[$(date +%H:%M:%S)]" "ntp_enabled: $ntp_enabled_prv -> $ntp_enabled"
    fi
    if [ "$ntp_synchronized" != "$ntp_synchronized_prv" ]; then
        print_line "[$(date +%H:%M:%S)]" "ntp_synchronized: $ntp_synchronized_prv -> $ntp_synchronized"
    fi
    if [ "$time_status" != "$time_status_prv" ]; then
        print_line "[$(date +%H:%M:%S)]" "time_status: $time_status_prv -> $time_status"
    fi

    print_line local: "$localt"
    print_line universal: "$universalt"
    print_line rtc: "$rtct"
    print_line 'NTP enabled:' "$ntp_enabled"
    print_line 'NTP synchronized:' "$ntp_synchronized"
    print_line 'time status:' "$time_status"

    sleep 1

    localt_prv="$localt"
    universalt_prv="$universalt"
    rtct_prv="$rtct"
    ntp_enabled_prv="$ntp_enabled"
    ntp_synchronized_prv="$ntp_synchronized"
    time_status_prv="$time_status"

    printf '\033[6A'
done

5
请提供有意义的解释。
mtk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.