Necesito probar aspectos de mi software que solo suceden en ciertos momentos del día. En lugar de esperar días enteros (y llegar aquí a las 2:00 a.m.), me gustaría cambiar la hora.
Pero prefiero no cambiarlo permanentemente .
Sé que puedo cambiar el tiempo usando date
, y luego volver a cambiarlo, pero ¿hay una mejor manera?
El sistema operativo en cuestión es RHEL6 ejecutándose en una VM.
Respuestas:
Hay una biblioteca llamada
libfaketime
(también en GitHub ) que le permite hacer que el sistema informe un momento determinado a su aplicación. Puede hacer que el sistema informe una hora fija durante la ejecución del programa o iniciar el reloj a una hora específica (por ejemplo, 01:59:30). Básicamente, conecta la biblioteca de 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 del sistema relacionadas 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 está buscando (de lo contrario, no veo ninguna razón para no solo cambiar el global hora del sistema).Hay varias variantes posibles sobre cómo usarlo, pero parece que Cambiar la hora a la que un proceso cree que es con libfaketime tiene una lista bastante completa junto con un código de muestra para probarlos. Google también debería poder descubrir algunos ejemplos dado que usted sabe qué buscar.
Parece que no está disponible preempaquetado a través de los repositorios RHEL, pero por ejemplo Debian lo proporciona bajo el nombre del paquete
faketime
. También parece sencillo construir desde el código fuente (aparentemente ni siquiera necesita unconfigure
paso o algo así).fuente
Lo que haría es instalar
ntp
primero un servicio para sincronizar la hora con un servidor remoto. Luego, detenga el servicio, cambie manualmente la fecha, juegue y reinicie el servicio:fuente