NTP 守护进程(ntpd)是否提供了某种虚拟时钟,它可以规范和服务,但不影响系统时钟?
目标:
在实时 Linux 操作系统上,有一个与系统时钟同步的 NTP 时钟,这样 ntp 时间变化不会导致系统出现问题,但我可以使用 NTP 时间进行调试目的,比如用于系统日志记录。
问题:
我们正在将 NTP 添加到现有系统,以前无需担心系统时间,但现在我们添加 NTP 以便更好地进行调试
设置:
- 系统上的某些应用程序依赖于 REALTIME 而不是 MONOTONIC 时间
- 我有本地时钟作为 NTP 服务器之一
- 默认没有设置外部 NTP 服务器
- 在启动时,ntpd 设置为立即将系统时钟同步到第一个可用的非本地时钟并退出,然后正常启动另一个 ntpd 实例
- 当没有设置外部 NTP 服务器时,系统将使用本地时钟的 ntpd 运行
设想:
- 假设在启动时没有设置 NTP 服务器,并且决定不设置任何 NTP 服务器
- 应用程序开始实时运行,没有问题
- 有人决定设置 NTP 服务器,但不重新启动系统
- 假设新添加的 NTP 服务器是比本地时钟更好的时间源,但存在偏移(可能是一分钟、一天甚至一个月)
- 如果在启动时将 ntpd 设置为允许巨大的偏移步进,那么这样做不会出现问题,但系统上的应用程序可能会崩溃(超时等)
- 如果在启动时将 ntpd 设置为仅允许斜率,但不允许步进,则由于偏移量巨大,系统可能需要很长时间才能同步到实际的 NTP 服务器时间
答案1
在我看来,您是在问如何让 Linux 拥有一个分裂大脑时钟:对于内核来说,一个时钟从不发生阶跃变化但可能出错;对于其他所有事物来说,一个时钟正确但可能发生阶跃变化。遗憾的是,Linux 不支持这个想法,而且要实现这一点需要做很多工作。
对于您的情况,我认为您可以采取以下措施来改善情况:
不要
ntpd
使用配置为源的本地时钟来运行,除非本地时钟非常准确(在您的情况下它不是非常准确,否则问题就不会出现)。不要让人们重新配置和/或
ntpd
在正在运行的系统下启动,除非他们知道自己在做什么。确保系统
hwclock --systohc
在关机时运行,以便将系统时间写入硬件时钟。在某个时刻,系统可能会获取良好的时间信号,这将有助于保存它。在此之后,系统从启动开始就会有一个相当好的时钟,并且启动后获取一个不错的 ntp 服务器将在时钟偏移的纠正能力范围内。