硬件时间的运行是靠 BIOS 电池来维持,而系统时间是用 CPU tick 来维持的。 在系统开机的时候,会自动从 BIOS 中取得硬件时间,设置为系统时间。 Linux下,默认情况下,系统时间和硬件时间,并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。 由于坑跌的 LS-WXL/E 是没有电池的,关机之后时间就停止运行了。所以再次开机之后。 登陆进 NAS 服务器 ssh -p 22 nong@192.168.2.11 首要的事情就是手动设置系统时间了。 设置当前时间,只有 root 权限才能设置,其他只能查看。 sudo date -s 设置成 20080523,但是会把具体时间设置成空 00:00:00 sudo date -s 20080523 设置具体时间,不会对日期做更改 sudo date -s 01:01:01 这样可以设置全部时间 sudo date -s "01:01:01 20080523" 这样可以设置全部时间 sudo date -s "20080523 01:01:01" 这样可以设置全部时间 sudo date -s "01:01:01 2008-05-23" 这样可以设置全部时间 sudo date -s "2008-05-23 01:01:01" 设置好后,可以用命令察看一下 date Mon Sep 7 08:19:02 CST 2015 注意,这里说的是系统时间,是由 Linux 操作系统维护的。在系统启动时,Linux 操作系统将时间从 CMOS 中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与 CMOS 时间的一致性,Linux 每隔一段时间会将系统时间写入 CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行 date -s 后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。 如果要确保修改生效可以执行如下命令。 以系统时间为基准,修改硬件时间 sys(系统时间)to(写到)hc(Hard Clock) sudo hwclock -w sudo hwclock --systohc 当然可以反过来,以硬件时间为基准,修改系统时间 sudo hwclock -s sudo hwclock --hctosys 查看硬件时间 可以是用 hwclock hwclock -r hwclock --show 为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux 系统下,一般使用ntp服务器 来同步不同机器的时间。一台机器,可以同时是 ntp服务器 和 ntp客户机。在网络中,推荐使用像 DNS服务器 一样分层的时间服务器来同步时间。 同步时间,可以使用ntpdate命令,也可以使用ntpd服务。 手动输入时间很麻烦,可以通过网络同步系统时间 ntpdate [-nv] [NTP IP/hostname] sudo ntpdate cn.pool.ntp.org 或者 sudo ntpdate 192.168.2.31 7 Sep 08:18:50 ntpdate[18966]: step time server 202.112.29.82 offset 323518936. 但这样的同步,只是强制性的将系统时间设置为ntp服务器时间。如果cpu tick有问题,只是治标不治本。所以,一般配合 cron 命令,来进行定期同步设置。 比如,在 crontab 中添加:0 12 * * * * /usr/sbin/ntpdate 192.168.0.1 这样,会在每天的12点整,同步一次时间。ntp服务器为192.168.0.1。 使用ntpd服务,要好于ntpdate加cron的组合。因为,ntpdate同步时间,会造成时间的跳跃,对一些依赖时间的程序和服务会造成影响。比 如sleep,timer等。而且,ntpd服务可以在修正时间的同时,修正cpu tick。理想的做法为,在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。 要注意的是,ntpd 有一个自我保护设置: 如果本机与上源时间相差太大, ntpd 不运行. 所以新设置的时间服务器一定要先 ntpdate 从上源取得时间初值, 然后启动 ntpd服务。ntpd服务 运行后, 先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间, 随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程。 关于 ntpd 怎么设置稍后继续贴上来。 |