冻结时间脚本
#!/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 命令会报错,但完全不影响任何效果,因为:
-
命令后面有
2>/dev/null,错误信息直接丢弃,你不会看到报错,脚本也不会中断。 -
VPS 里本来就没有 VMware Tools 的时钟同步,我们也不需要禁用它。这两行只是“有就关,没有就跳过”的保险措施。
-
真正关键的是关闭
chronyd、systemd-timesyncd和timedatectl set-ntp false,这些在 VPS 上通常都存在,会生效