Como definir a hora temporariamente no Linux

3

Estou testando algum código com alguns números aleatórios gerados com a hora atual como a semente usando

srand(time(0)) 

Eu gostaria de obter os mesmos números aleatórios toda vez que eu o executo. Então eu quero definir o valor da hora atual para algum valor pré-definido temporariamente antes de executar o programa. E, por favor, não me peça para remover o número aleatório temporariamente, pois é extremamente essencial.

Além disso, não tenho acesso root, por isso não posso definir a data / hora usando o comando date ou seu equivalente programático.

    
por 2991ambusher 14.03.2013 / 05:09

5 respostas

3

Use faketime .

faketime '2013-03-14 08:25:30' ./your_program

Se você não é root, você pode simplesmente baixar o programa manualmente a partir de sua distribuição. Por exemplo, se você usa um derivado do Debian que usa o APT:

aptitude download faketime
mkdir /tmp/faket/ dpkg-deb --extract faketime*.deb /tmp/faket
cp /tmp/faket/usr/bin/faketime ~
cp /tmp/faket/usr/lib/faketime/* ~
cd
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:."
./faketime '2013-03-14 08:25:30' ./your_program
    
por 14.03.2013 / 08:27
0

Sem acesso root, você não pode definir a hora no servidor. Além disso, quando você diz "eu gostaria de obter o mesmo número aleatório toda vez que eu o executo." você realmente está se colocando em um ponto difícil de possibilidades.

Você não pode obter o mesmo número aleatório repetidamente ao executar um aplicativo / script / etc. Portanto, a melhor coisa que você pode fazer é gerar um número aleatório e usá-lo estaticamente toda vez que executar o aplicativo para testes.

    
por 14.03.2013 / 05:25
0

Sem acesso root, você não poderá fazer o que perguntar; a não ser que, talvez, você pudesse criar uma máquina virtual (mas precisaria ser root na VM). Por que não fingir?

time_t time(time_t *dummy)
{
    return(atoi(getenv("FAKE_TIME")));
}

Em outras palavras, escolha um valor que você deseja usar como sua semente para todos os seus testes e atribua-o à variável de ambiente FAKE_TIME . Altere o código de volta quando você terminar de testar.

Obviamente, isso é apenas um exemplo; Você pode tornar a lógica mais complicada se quiser. (Mas se você está semeando o gerador de umber aleatório apenas uma vez por chamada de programa, provavelmente não há necessidade de fazer isso.)

    
por 14.03.2013 / 05:43
0

Passe a semente como um item de configuração, a partir da linha de comando ou de um arquivo de configuração.

Parece-me extremamente estranho obstinar-me em obter a semente geradora aleatória da hora atual e, em seguida, forçá-la.

    
por 19.03.2013 / 12:52
0

Se estiver usando o ntpd (verifique com service ntpd status ):

service ntpd stop
date --set="23 June 1988 22:22:55"

Quando terminar:

ntpd -gq
service ntpd start
    
por 19.09.2018 / 03:21

Tags