Alterar temporariamente o tempo

15

Preciso testar aspectos do meu software que só acontecem em determinados momentos do dia. Em vez de esperar dias inteiros (e chegar aqui às 2:00 da manhã), eu gostaria de mudar o horário.

Mas prefiro não alterá-lo permanentemente .

Eu sei que posso alterar o tempo usando date e, em seguida, alterá-lo novamente, mas existe uma maneira melhor?

O SO em questão é o RHEL6 em execução em uma VM.

    
por John Dibling 02.08.2013 / 18:25

2 respostas

21

Há uma biblioteca chamada libfaketime (também no GitHub ) que permite fazer com que o sistema informe um determinado tempo para sua aplicação. Você pode ter o sistema informando um horário fixo durante a execução do programa ou iniciar o relógio em um horário específico (por exemplo, 01:59:30). Basicamente, você conecta a biblioteca faketime à imagem em memória do programa através do carregador de biblioteca e captura e manipula de maneira própria todas as chamadas do sistema relacionadas à hora do sistema. Não exatamente altera a hora do sistema, mas muda o horário relatado para sua aplicação específica sem afetar qualquer outra coisa que esteja sendo executada, o que é provavelmente o que você realmente é depois (caso contrário, não vejo razão para não apenas mudar a hora global do sistema).

Há várias variantes possíveis de como usá-lo, mas parece que Mudar a hora em que um processo pensa que é com o libfaketime tem uma listagem bem completa junto com um código de amostra para testá-los. O Google também deve descobrir alguns exemplos, já que você sabe o que pesquisar.

Parece que ele não está disponível pré-empacotado através dos repositórios do RHEL, mas, por exemplo, o Debian o fornece sob o nome do pacote faketime . Ele também olha para frente para construir a partir do código-fonte (aparentemente nem precisa de uma etapa configure ou algo assim).

    
por 02.08.2013 / 18:40
5

O que eu gostaria de fazer é primeiro instale um ntp service para sincronizar a hora com um servidor remoto. Em seguida, pare o serviço, altere manualmente a data, jogue e reinicie o serviço:

service ntpd stop
date -s "Aug 11 2012"
[ do stuff ]
service ntpd start
    
por 02.08.2013 / 18:42

Tags