A hora do sistema pode ser pausada?

2

Esta pode ou não ser a abordagem correta, mas a minha viabilidade foi solicitada:

Temos um servidor de demonstração que atualizamos de tempos em tempos para manter os cálculos estatísticos atualizados. A única razão pela qual temos que fazer isso é que alguns cálculos / estatísticas só aparecem se estiverem nos últimos X dias.

Foi-me perguntado se é possível parar o relógio do sistema no CentOS quando as chamadas são feitas usando o carimbo de data / hora do UNIX. Se o tempo fosse pausado, os cálculos seriam os mesmos todos os dias e não precisaríamos mais atualizar o banco de dados com novos dados.

Provavelmente existem outras abordagens (script para atualizar dados atuais com carimbos de data / hora recentes, etc.), mas essa solicitação me intrigou e estou curioso para saber se é possível.

    
por Jordan Finnigan 09.04.2015 / 00:09

3 respostas

3

Eu não acho que você possa pausar a hora do sistema. Muitos programas não gostariam, porque geralmente esperam que o tempo avance. Se você fizesse uma pausa na hora, qualquer programa que entrasse em sleep nunca acordaria.

Eu não entendo exatamente o que você está tentando fazer, mas suspeito que faketime faça o que você está procurando. Ele permite que você execute programas com um tempo falso, avançando na taxa normal, mas com um deslocamento do tempo real, ou até mesmo fazendo o tempo passar x vezes mais rápido.

Se você precisar de tempo para avançar em uma taxa variável para esses programas, faketime não faz isso, mas provavelmente poderia ser adaptado para fazer isso com um pouco de programação. Como alternativa, você pode executar os programas em uma máquina virtual e definir a hora do sistema na VM como desejar.

    
por 09.04.2015 / 00:57
0

Existe uma ferramenta muito interessante chamada warp que torna possível ajustar como o tempo de um determinado processo deve ser ajustado de maneira arbitrária - por exemplo, mudou e até escalou! - enquanto a hora global do sistema não é afetada. A fórmula de ajuste de tempo é tempo = tempo + dobra + (base de tempo) * (fator - 1). Os detalhes estão descritos na página de manual de deformação . O método que ele usa é interceptar todas as informações de tempo do sistema usando o recurso de pré-carregamento da DLL e, tecnicamente, ser capaz de vincular-se às chamadas de funções de tempo requer um programa vinculado dinamicamente. Se essa condição prévia for atendida, você poderá usá-la transparentemente sem alterações em seu executável chamando apenas warp ... program ... (onde os primeiros ... são os argumentos para warp para ajustar como o tempo é visto para o program subsequente).

    
por 09.04.2015 / 09:38
0

Sua solução hacky feliz é algo nesse sentido (como root):

export NOW=$(date); watch -n1 date --set=\"$NOW\"

Mas provavelmente não é uma grande ideia:)

    
por 09.04.2015 / 13:02