一、设置时间

date --set '2015-11-23 0:10:40'  # 方法一,通用
timedatectl set-time '2015-11-23 08:10:40' # 容器内可能不支持

二、设置时区

# 方法一,通用
# 对容器而言,也可以直接将宿主机的下面俩文件映射到容器内
# 或者有的容器支持使用环境变量
/bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone # 方法二,容器内可能不支持
timedatectl set-timezone UTC

三、同步时间(一次性)

Alpine Linux: ntpd -d -q -n -p ntp3.aliyun.com,立即同步时间,不限制同步间隔

CentOS/Ubuntu:

sudo apt-get install ntpdate  # 或者 yum
ntpdate ntp3.aliyun.com

国内公共 ntp 服务器:

  1. 国家授时中心:ntp.ntsc.ac.cn
  2. 阿里云:ntp3.aliyun.com

四、时间同步服务(常驻后台)

建议用 chronyd,有 docker 的可以跑容器版本的 chronyd

五、只修改应用本身的时间:libfaketime

这种需求常见于时光旅行测试(Time-Travel Testing),需要修改应用的时间,以确认与时间相关的逻辑是否正确(比如订单是否过期之类的)。

为了不影响系统上别的软件,最好是只修改应用本身的时间,不会影响操作系统全局。比如对运行在 kubernetes 集群上的一套微服务进行时光旅行 API 测试,修改(节点)操作系统的时间很可能会导致集群节点故障。

libfaketime 可以通过环境变量 FAKETIME 很方便的设置 fake 的 time,而不影响系统上其他环境的应用。这可以保证别的程序不受系统时间跃迁的影响。

我实际测试这个库后发现:

  1. libfaketime 设置时间默认有 10s 的缓存,可通过设置环境变量 `FAKETIME_CACHE_DURATION 进行修改。参见 Time modification does not take effect immediately
  2. Python 能直接通过修改环境变量 FAKETIME 达到修改时间的目的。
  3. Dotnet 设置的环境变量 FAKETIME 对 libfaketime 无效,这可能和 dotnet 自身的环境变量模型有关。
    • dotnet 需要通过将参数写入 /etc/faketimerc$HOME/.faketimerc 修改时间。
  4. docker+dotnet+libfaketime 测试,发现性能问题比较严重。

修改环境变量的方法很方便,但不适合用于进程间相互修改时间(比如我 ssh 进容器改容器时间),有时可能会失效。而写入配置文件的方法可以跨进程通信,更可靠。

Linux 服务器修改时间与时间同步的更多相关文章

  1. linux服务器应用NTP配置时间同步

    linux服务器应用NTP配置时间同步 • 为什么建议使用ntpd而不是ntpdate? #####原因很简单,ntpd是步进式的逐渐调整时间,而ntpdate是断点更新,比如现在服务器时间是9.18 ...

  2. Linux服务器修改时区时间

    时间的一致性很关键,对于日志的分析和程序的对接都至关重要! 01.tzselect 修改时区 可以使用命令 tzselect,修改时区.操作示例: $ tzselect Please identify ...

  3. Linux查看修改时间、时区

    同步网络时间 yum install ntpntpdate time.nist.gov timedatectl set-timezone Asia/Shanghai如果上面time.nist.gov服 ...

  4. Linux下修改时间时区的方法介绍

    点评:在Linux中,用于时钟查看和设置的命令主要有date.hwclock和clock.其中,clock和 hwclock用法相近,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件 ...

  5. Linux服务器同步时间

    进行Linux服务器的时间同步是一件需要注意的事情,不然,集群中的服务器时间不同将导致许多奇怪问题发生, 如果没有安装crontab,那么,使用yum install crontabs进行安装和启动, ...

  6. linux下修改时间和时区

    一.修改linux的时间在root用户下,使用date指令:date -s1.只修改日期,不修改时间,输入: date -s -- 2.只修改时间,输入: date -s :: 3.同时修改日期时间, ...

  7. Linux下修改时间

    修改linux的时间可以使用date指令 date命令的功能是显示和设置系统日期和时间. 输入date 查看目前系统时间. 修改时间需要 date -功能字符 修改内容 命令中各选项的含义分别为: - ...

  8. linux 下修改时间

    修改linux的时间可以使用date指令 date命令的功能是显示和设置系统日期和时间. 输入date 查看目前系统时间. 修改时间需要 date -功能字符 修改内容 命令中各选项的含义分别为: - ...

  9. 云服务器linux系统修改时间和时区

    申请的云服务器时间不对,用同步网络时间的命令执行后依然有问题. 解决办法: # tzselect [root@ylyuat2-web02 logs]# TZ='Asia/Shanghai'[root@ ...

随机推荐

  1. iframe的src指向的内容不刷新

    想任何一种办法让iframe的src的值有变化就可以了 $("#h5Content").attr("src","${h5.url}"+&qu ...

  2. 夺灵者哈卡(Hakkar, the Soulflayer)

    Hakkar, the Soulflayer夺灵者哈卡Deathrattle: Shuffle a Corrupted Blood into each player's deck.亡语:将一张“堕落之 ...

  3. [设计原则与模式] Java 适配器模式

    cp from : https://blog.csdn.net/xiaouncle/article/details/80553923 设计模式本质上就是“SOLID设计原则”在实际应用中的具体体现,我 ...

  4. laravel 通过ftp上传的时候报错 Use of undefined constant FTP_BINARY - assumed 'FTP_BINARY

    用Laravel中的filesystems里面的ftp上传文件时报错.在windows上开发,文件上传的时候碰到上面的问题,搜了些资料,发现是php7的ftp拓展默认未开启. filesystems是 ...

  5. windows 下的Python虚拟环境(vitrualen)pycharm创建Django项目

    问题:MySQL Strict Mode is not set for database connection 'default' 初学Django遇到问题-MySQL Strict Mode is ...

  6. 【json/regex】将嵌套对象生成的json文进行内部整形排序后再输出

    下载地址:https://files.cnblogs.com/files/xiandedanteng/jsonformat20191126-2.zip 注意:本文仅为draft1版本,还有待完善. 先 ...

  7. IDEA一些自动补全方式

    第一种:系统自带:可以CTRL + j 可以查看 psvm 也就是public static void main的首字母. 依次还有在方法体内键入for会有一个fori的提示,选中然后tab键,就会自 ...

  8. tansition-group 使用方法

    <transition-group name="breadcrumb"> <el-breadcrumb-item v-for="(item,index) ...

  9. CopyOnWrite 思想及在 Java 并发包中的具体体现

    读多写少的场景下引发的问题? 假设现在我们的内存里有一个 ArrayList,这个 ArrayList 默认情况下肯定是线程不安全的,要是多个线程并发读和写这个 ArrayList 可能会有问题. 那 ...

  10. Oracle 获取表的主键、外键以及唯一约束条件

    Oracle 获取表的主键.外键以及唯一约束条件 Select a.Owner 主键拥有者, a.table_name 主键表, b.Column_Name 主键列, b.Constraint_Nam ...