Hay una biblioteca llamada libfaketime
(también en GitHub) que le permite hacer que el sistema informe en un momento determinado a su aplicación. Puede hacer que el sistema informe una hora fija para la duración de la ejecución del programa o iniciar el reloj a una hora específica (por ejemplo, 01:59:30). Básicamente, conecta la biblioteca faketime a la imagen en memoria de su programa a través del cargador de la biblioteca, y captura y maneja a su manera todas las llamadas al sistema que se relacionan con la hora del sistema. No cambia exactamente la hora del sistema, pero cambia la hora que se informa a su aplicación específica sin afectar nada más que se esté ejecutando, que es probablemente lo que realmente busca (de lo contrario, no veo ninguna razón para no cambiar la hora global del sistema).
Hay una serie de posibles variantes sobre cómo usarlo, pero parece que Cambiar la hora en que un proceso piensa que es con libfaketime tiene una lista bastante completa junto con un código de muestra para probarlos. Google también debería ser capaz de encontrar algunos ejemplos dado que sabes qué buscar.
Parecería que no está disponible preempaquetado a través de los repositorios de RHEL, pero, por ejemplo, Debian lo proporciona con el nombre del paquete faketime
. También parece sencillo construir a partir del código fuente (aparentemente ni siquiera necesita un configure
paso o algo por el estilo).
Lo que haría sería primero instalar un ntp
servicio para sincronizar la hora con un servidor remoto. Luego, detenga el servicio, cambie manualmente la fecha, juegue y reinicie el servicio:
service ntpd stop
date -s "Aug 11 2012"
[ do stuff ]
service ntpd start