让Linux机器的时间永远停留在固定一个时间

冻结时间脚本

#!/bin/bash
# 冻结系统时间到 2025-12-31 03:00:00 UTC(时间戳 1767150000)
# 星期三 农历十一月十二,所有数字无4无8

while true; do
    date -s "2025-12-31 03:00:00 UTC" > /dev/null 2>&1
    hwclock --set --date="2025-12-31 03:00:00 UTC" > /dev/null 2>&1
    sleep 1
done

完整操作流程

1. 临时切换 UTC + 关闭时间同步(避免终端显示 08 等)

sudo timedatectl set-timezone UTC
sudo vmware-toolbox-cmd timesync disable 2>/dev/null
sudo systemctl stop chronyd 2>/dev/null
sudo systemctl stop systemd-timesyncd 2>/dev/null
sudo timedatectl set-ntp false

2. 创建脚本文件

sudo vi /root/freeze_time.sh

按 i 进入编辑模式,粘贴上面脚本内容,按 ESC 后输入 :wq 保存。(冻结脚本在顶部)

3. 赋予执行权限

sudo chmod +x /root/freeze_time.sh

4. 后台运行脚本

sudo nohup /root/freeze_time.sh &

看到类似 [1] 12345 的输出即表示已运行。

5. 验证冻结

连续执行几次:

date +%s

应输出 1767150000 或 1767150001(多试几次对比一下)。

6. 安装一些项目并创建初期内容

保持脚本运行,正常安装 设置注册等一些项目。
写入的时间戳都会是 1767150000 或 1767150001

7. 全部完成后停止脚本

sudo pkill -f freeze_time.sh

8. 恢复时区、时间同步

sudo timedatectl set-timezone Asia/Shanghai
sudo vmware-toolbox-cmd timesync enable 2>/dev/null
sudo timedatectl set-ntp true
sudo systemctl start chronyd 2>/dev/null
sudo systemctl start systemd-timesyncd 2>/dev/null
sudo hwclock --systohc

9. 验证是否恢复

date +%s

多试几次输出的数字应该增加了(多试几次对比一下)。

10. 补充

在 VPS(云服务器)上操作时,那两行 vmware-toolbox-cmd 命令会报错,但完全不影响任何效果,因为:

  1. 命令后面有 2>/dev/null,错误信息直接丢弃,你不会看到报错,脚本也不会中断。

  2. VPS 里本来就没有 VMware Tools 的时钟同步,我们也不需要禁用它。这两行只是“有就关,没有就跳过”的保险措施。

  3. 真正关键的是关闭 chronydsystemd-timesyncd 和 timedatectl set-ntp false,这些在 VPS 上通常都存在,会生效

 

给TA打赏
共{{data.count}}人
人已打赏
技术

防止CloudFlare R2被恶意刷流量的实用设置

2026-6-9 11:05:18

技术

WordPress自动更新管理插件

2026-6-15 5:20:19