修改单进程系统时间

161 阅读1分钟

前言

需要测试修改时间,如果操作系统环境不允许调整时间,就要想办法调整单个进程的时间

libfaketime如何解决这个问题

libfaketime通过LD_PRELOAD hook glbic获取系统时间的相关接口来mock时间,通过环境变量来控制计算系统时间的算法。

注意:不支持静态链接的程序

安装

从github下载:github.com/wolfcw/libf…

make && make install即可

使用示例

faketime.sh

#! /bin/bash
export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1

#export FAKETIME="2023-03-29 17:00:00" # 一直保持这个时间点
export FAKETIME="@2023-03-29 17:00:00" # 时间为从这个时间点起

php ./date.php

date.php

<?php
date_default_timezone_set('PRC');

echo date('Y-m-d H:i:s') . "\n";
sleep(1);
echo date('Y-m-d H:i:s') . "\n";
sleep(2);
echo date('Y-m-d H:i:s') . "\n";

执行

root@ubuntu18_04:~# bash faketime.sh 
2023-03-29 17:00:00
2023-03-29 17:00:01
2023-03-29 17:00:03