Estou conectado ao pequeno cluster Linux da minha universidade via PuTTY e WinSCP, transferindo arquivos usando o último e compilando e executando-os com o primeiro. Até agora, meu trabalho foi realizado nos laboratórios da universidade, mas hoje trabalho em casa, gerando um aviso interessante.
Carreguei uma pasta inteira de coisas e, ao executar o make
comando, recebo isso como a última linha de saída:
make: warning: Inclinação do relógio detectada. Sua compilação pode estar incompleta.
O binário resultante funciona corretamente e não parece haver outros erros inesperados no processo de compilação.
Parece que sou capaz de desencadear o erro criando após o upload de alguns arquivos novos / de substituição (edito tudo localmente e depois carrego a nova versão), por isso estou me perguntando se é algo tão simples quanto os tempos de modificação de arquivos incompatíveis? Ou algo mais preocupante?
Então, eu deveria estar preocupado? Como faço para corrigir / impedir isso?
Respostas:
Essa mensagem geralmente indica que alguns de seus arquivos têm tempos de modificação posteriores ao horário atual do sistema. Como
make
decide quais arquivos compilar ao executar uma construção incremental, verificando se um arquivo de origem foi modificado mais recentemente que o arquivo de objeto, essa situação pode causar a criação de arquivos desnecessários ou, pior ainda, os arquivos necessários a não serem criados.No entanto, se você estiver construindo a partir do zero (não fazendo uma construção incremental), provavelmente poderá ignorar esse aviso sem conseqüências.
fonte
touch *
atualizará os horários para o horário atual. Como alternativa, você pode ativar o NTP na área de trabalho para sincronizar o relógio (assumindo que a área de trabalho está errada e não a máquina da Uni ... se esta for a última, talvez peça aos administradores do sistema para corrigi-lo?)touch *
é por enquanto e vou ver se consigo descobrir o que está errado e talvez ter uma palavra com o administrador na próxima vez que estiver no site.find . -exec touch {} \;
touch
esse pode aceitar vários arquivos para atuar, você pode fazê-lo (muito) de forma mais eficiente com afind . -exec touch {} +
qual invocará otouch
maior número possível de argumentos.Normalmente, isso ocorre ao criar um diretório montado no NFS, e os relógios no cliente e no servidor NFS estão fora de sincronia.
A solução é executar um cliente NTP no servidor NFS e em todos os clientes.
fonte
Instale o protocolo de tempo de rede
Isso também aconteceu comigo ao executar
make
em um compartilhamento Samba SMB CIFS em um servidor. Uma solução durável consiste em instalar ontp
daemon no servidor e no cliente. (Observe que esse problema não é resolvido executandontpdate
. Isso resolveria a diferença de horário apenas temporariamente, mas não no futuro.)Para sistemas derivados do Ubuntu e Debian, basta digitar a seguinte linha na linha de comando:
Além disso, ainda será necessário emitir o comando
touch *
uma vez (e apenas uma vez) no diretório afetado para corrigir os tempos de modificação do arquivo de uma vez por todas.Para mais informações sobre as diferenças entre
ntp
entpdate
, consulte:fonte
Solução simples:
vai fazer tudo certo.
Para mais informações: http://embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html
fonte
De acordo com o usuário m9dhatter no LinuxQuestions.org :
fonte
As outras respostas aqui explicam bem o problema, por isso não repetirei aqui. Mas há uma solução que pode resolvê-lo que ainda não está listada: simplesmente execute
make clean
e execute novamentemake
.Ter make remove todos os arquivos compilados impedirá que o make tenha arquivos para comparar os carimbos de data e hora, resolvendo o aviso.
fonte
make clean
você resolverá os problemas (criando outros).touch
todos os arquivos. Você está certo de que exigirá uma recompilação completa, mas se vale ou não a pena o tempo irá variar dependendo de suas prioridades e tamanho do projeto. Não acho correto dizer que "não é uma solução real" apenas porque não é a melhor ou tem algumas desvantagens. Isso resolverá o problema; parece uma solução para mim.make clean
Eu tive isso no passado - devido aos relógios estarem nas máquinas. Considere configurar o NTP para que todas as máquinas tenham o mesmo tempo.
fonte
Isso geralmente ocorre devido a tempos de incompatibilidade entre as máquinas host e cliente. Você pode tentar sincronizar os horários em suas máquinas usando o ntp .
fonte
A solução é executar um cliente NTP, basta executar o comando abaixo
172.16.12.100 é o servidor ntp
fonte
ntpdate
é apenas uma correção pontual. É melhor instalarntp
no servidor e no cliente para obter uma solução durável.Substitua a bateria do relógio no seu computador. Eu vi essa mensagem de erro quando a bateria que estava procurando moeda na placa-mãe estava precisando ser substituída.
fonte
(Caso alguém chegue aqui) Se você possui direitos de sudo, uma opção é sincronizar a hora do sistema
fonte
Verifique se o resultado da compilação, por exemplo, somefile.o, é mais antigo que a fonte, por exemplo, somefile.c. O aviso acima significa que algo nos timestaps dos arquivos é estranho. Provavelmente, os relógios do sistema do servidor da universidade diferem do seu relógio e, por exemplo, você envia às 13:00 um arquivo com data de modificação 14:00. Você pode ver a hora no console digitando data.
fonte
Isso aconteceu comigo. É porque eu corri
make -j 4
e alguns trabalhos terminaram fora de ordem. Este aviso deve ser esperado ao usar a-j
opçãofonte