zoukankan      html  css  js  c++  java
  • Linux

    1. 时区的概念

    1.1 时区简介

      地球是自西向东自转,东边比西边先看到太阳,东边的时间也比西边的早。东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒来计算,这给人们带来不便。所以为了克服时间上的混乱,1884年在华盛顿召开的一次国际经度会议(又称国际子午线会议)上,规定将全球划分为24个时区(东、西各12个时区)。规定英国(格林尼治天文台旧址)为中时区(零时区)、东1-12区,西1-12区。每个时区横跨经度15度,时间正好是1小时。最后的东、西第12区各跨经度7.5度,以东、西经180度为界。每个时区的中央经线上的时间就是这个时区内统一采用的时间,称为区时,相邻两个时区的时间相差1小时。例如,中国东8区的时间总比泰国东7区的时间早1小时,而比日本东9区的时间迟1小时。因此,出国旅行的人,必须随时调整自己的手表,才能和当地时间相一致。凡向西走,每过一个时区,就要把表拨慢1小时(比如2点拨到1点);凡向东走,每过一个时区,就要把表拨快1小时(比如1点拨到2点)。并且规定英国(格林尼治天文台旧址)为本初子午线,即零时(24时)经线。

      实际上,世界上不少国家和地区都不严格按时区来计算时间。但为了在全国范围内采用统一的时间,一般都把某一个时区的时间作为全国统一采用的时间。例如,中国把首都北京所在的东8区的时间作为全国统一的时间,称为北京时间。又例如,法国、荷兰和比利时等国,虽然地处中时区,但为了和欧洲大多数国家时间相一致,则采用东1区的时间。

    1.2 世界各城市时间查询

      查询网站:https://www.timeanddate.com/

    2. GMT、UTC、CST、DST 时间

    2.1 UTC

       整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。

    2.2 GMT

       格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分)

    2.3 CST

       中国标准时间 (China Standard Time)  UTC = GMT = CST - 8 

    2.4 DST

       夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用。(中国不使用)

    3. 硬件时间和系统时间

    3.1 硬件时间

      RTC(Real-Time Clock)或CMOS时间,一般在主板上靠电池供电,服务器断电后仍然继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。

    3.2 系统时间

      一般在服务器启动时复制RTC时间,之后独立运行,保存了时间、时区和夏令时设置。

    4. CentOS7上的时间管理命令:timedatectl

    4.1 timedatectl 选项

    $ timedatectl --help
    timedatectl [OPTIONS...] COMMAND ...
    
    Query or change system time and date settings.
    
      -h --help                Show this help message
         --version             Show package version
         --no-pager            Do not pipe output into a pager
         --no-ask-password     Do not prompt for password
      -H --host=[USER@]HOST    Operate on remote host
      -M --machine=CONTAINER   Operate on local container
         --adjust-system-clock Adjust system clock when changing local RTC mode
    
    Commands:
      status                   Show current time settings
      set-time TIME            Set system time
      set-timezone ZONE        Set system time zone
      list-timezones           Show known time zones
      set-local-rtc BOOL       Control whether RTC is in local time
      set-ntp BOOL             Control whether NTP is enabled

    4.2 timedatectl 案例

    查看当前系统时间、时区

    $ timedatectl 
          Local time: Thu 2018-10-11 13:03:04 CST
      Universal time: Thu 2018-10-11 05:03:04 UTC
            RTC time: Thu 2018-10-11 01:17:11
           Time zone: Asia/Shanghai (CST, +0800)
         NTP enabled: no
    NTP synchronized: no
     RTC in local TZ: no
          DST active: n/a
    
    $ timedatectl status
          Local time: Thu 2018-10-11 13:03:09 CST
      Universal time: Thu 2018-10-11 05:03:09 UTC
            RTC time: Thu 2018-10-11 01:17:16
           Time zone: Asia/Shanghai (CST, +0800)
         NTP enabled: no
    NTP synchronized: no
     RTC in local TZ: no
          DST active: n/a

    列出全世界所有的时区

    # timedatectl list-timezones | grep Asia
    ...
    Asia/Hong_Kong
    Asia/Shanghai
    Asia/Taipei
    Asia/Urumqi ...

    设置时区

    # 方法1:
    # 将时区设置为上海 $ timedatectl set
    -timezone Asia/Shanghai

    # 方法2:
    # 直接修改符号链接
    $ rm /etc/localtime
    $ ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime
     

    设置时间

    # 方法1:使用timedatectl,NTP enabled: yes时,使用了NTP服务器自动同步时间,若坚持要手动修改时间,先timedatectl set-ntp no。
    # 设置日期和时间
    $ timedatectl set-time '2018-10-11 09:00:00'
    # 设置日期
    $ timedatectl set-time '2018-10-11'
    # 设置时间
    $ timedatectl set-time '09:00:00'
    
    # 方法2:使用date
    $ date -s '2018-10-11 09:00:00'

    同步系统时间到硬件时间

    # 方法1:不建议硬件时间随系统时间变化
    # 设置硬件时间随系统时间变化
    $ timedatectl set-local-rtc 1
    # 设置硬件时间不随系统时间变化
    $ timedatectl set-local-rtc 0
    
    # 方法2:
    $ hwclock --systohc

    是否启用自动同步时间

    # 启用|停用自动同步时间
    $ timedatectl set-ntp yes|no
    
    # 上面的命令其实是启用、停用时间服务器,若安装了chrony服务,则等同于对该服务启停,若只安装了ntp,则是对ntp服务启停。
    # 对chrony服务启停
    $ systemctl start|stop chronyd
    # 对ntp服务启停
    $ systemctl start|stop ntpd

    5. 自动同步时间:服务ntp、chrony,命令ntpdate

      CentOS7之前采用ntp服务自动同步时间,CentOS7推荐使用chrony同步时间,当然ntp仍然可以使用,chrony官网列举了诸多chrony优于ntp的功能(ntp与chrony的对比:https://chrony.tuxfamily.org/comparison.html)。

      此外我们若要立刻将系统时间同步为NTP服务时间,使用ntpdate命令,也可以配置计划任务定期使用ntpdate命令同步时间,从而就不用使用ntp或chrony服务,减少监听的端口,增加系统安全性。

    5.1 ntp的安装配置

    安装ntp

    $ yum -y install ntp

    配置ntp同步阿里云时间服务器

    $ vim /etc/ntp.conf
    ...
    server ntp1.aliyun.com
    server ntp2.aliyun.com
    server ntp3.aliyun.com
    #server 0.centos.pool.ntp.org iburst
    ...

    启动ntp服务器

    $ systemctl start ntpd

    5.2 chrony的安装配置

    安装chrony

    $ yum -y install chrony

    配置chrony

    $ vim /etc/chrony.conf
    server ntp1.alyun.com
    server ntp2.alyun.com
    server ntp3.alyun.com
    #server 0.centos.pool.ntp.org iburst
    ...

    启动chrony

    $ systemctl start chronyd

    5.3 配置计划任务,使用ntpdate同步时间

    # 启动并开机启动计划任务cron
    $ systemctl start crond
    $ systemctl enable crond
    
    # 配置计划任务,每5分钟同步一次
    $ crontab -e
    */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

    6. 参考文章

    [博客]   centos7之关于时间和日期以及时间同步的应用  作者:Charles.L

    [百科] 搜狗百科时区的介绍

    Andraw|朱标
  • 相关阅读:
    tmux 的基本使用
    ffmpeg(1) 基础框架
    VUE页面跳转方式
    nextcloud 中文乱码解决方案
    mysql8 navicat远程链接失败
    prometheus+grafana实现服务监控
    sqlalchemy ————关联表
    Python flask自定义异常信息,返回json格式的异常
    sqlalchemy 查询结果转json个人解决方案
    Linux添加字体
  • 原文地址:https://www.cnblogs.com/zhubiao/p/9768209.html
Copyright © 2011-2022 走看看