
Eu gostaria de usar o ntpd
daemon comum para testar se o tempo é mantido por uma máquina virtual ou não, sem deixá-lo realmenteajustaro relógio.
Estou executando o Solaris 11.4 (imagem padrão da Oracle para Intel) dentro do VirtualBox em um sistema macOS e não consigo sincronizar corretamente. Ocorreu-me que a VM já poderia estar usando o VirtualBox Guest Additions para fazer isso (não sei como isso funciona) e que eu poderia estar atrapalhando o tempo ao executar ntpd
o convidado.
Para testar isso, pensei em configurar ntpd
na VM Solaris paramonitoralguns servidores de horário públicos, mas de alguma forma evita que ele modifique o relógio local. Dessa forma, eu poderia observar a aparência dos registros loopstats
e peerstats
ao longo do tempo para ver se o relógio local realmente marcava o horário.
O problema é que não consigo encontrar nenhuma dica sobre como parar ntpd
de ajustar o relógio local.
Eu também queria fazer isso no passado em sistemas onde uso openntpd
(do OpenBSD) para manter o tempo real. O ntpd
daemon poderia então ficar em segundo plano e monitorar, sem interferir. Mas também não consegui encontrar nenhuma maneira de conseguir isso.
Responder1
NTPD
Entendendo que vocêdeveuse ntpd, as únicas opções AFAIK são:
desabilitar NTP
Como visto ema ntp.conf
página do manualexiste a possibilidade de desabilitar o ntpLoop de feedback, ou, em termos leigos: remover a capacidade de calcular correções de horário entre servidores de horário e o relógio local. A ntp.conf
linha necessária para ativar tal opção é:
disable ntp
Nota: ao usar esta opção o tempo que o ntpd pode dar a outros sistemas que solicitam uma referência de tempo pode estar errado/desligado. Parece razoável usar uma linha para deny
negar todas as consultas de tempo de outros sistemas, a menos que você queira monitorar o desvio de tempo de um sistema externo (use negar e permitir o IP do sistema externo).
Observação:Não está completamente claro para mim se o relógio do sistema é realmente deixado para "funcionar livremente" pelo ntpd. No entanto, é uma opção documentada, portanto, se o ntpd não cumprir o que está documentado, é um bug.
minsano
minsane minsane
Este é o número mínimo de candidatos disponíveis para o algoritmo de seleção de relógio, a fim de produzir um ou mais truechimers para o algoritmo de agrupamento. Se menos do que este número estiver disponível,o relógio é indisciplinado e pode funcionar livremente.
Isso é feito definindo uma linha (in ntp.conf
) como:
tos minsane 100
Ou algum outro número alto (maior que os servidores disponíveis ou utilizados).
Nota: não está claro para mim que o valor do desvio do kernel seja redefinido para 0 para evitar que o valor do relógio mude lentamente. Pode ser razoável definir adicionalmente disable kernel
para desabilitar as funções de disciplina do kernel.
Relacionado
ntpd -qn
Quando um ntpd
servidor está em execução, ntpq -pn
pode relatar quão bem o servidor NTPD está fazendo seu trabalho de manter o relógio do sistema sincronizado. Essa é uma forma alternativa de registrar a diferença horária.
ntpdate -q
O pacote ntpdate
(que está marcado como obsoleto) pode ser usado para verificar a diferença de horário com:
ntpdate -q 'pool.ntp.org' # marked as deprecated.
Use ntpdate -qu 'pool.ntp.org'
para que o comando não precise de privilégios de root para ser executado ( -u
significa "usar portas de rede sem privilégios", ainda assim, o executável deve estar acessível ao usuário).
sntp
Existe um programa simples para consultar (não altere se nenhuma opção -s ou -S for usada):
sntp pool.ntp.org
data de atualização
O programa rdate
é capaz de mostrar a hora remota (e a hora local):
rdate -np pool.ntp.org; date
Onde -n
significa: Usar SNTP (RFC 2030) em vez do protocolo de tempo RFC 868 (padrão); e, para apenasimprimiro resultado sem fazer quaisquer alterações reais.
No entanto, este programa está limitado a uma resolução de segundos inteiros (não frações). E issonão tem opções no solaris
crônica
O pacote substituto do ntp (chrony) é capaz de executar um teste de diferença de horário sem acertar o relógio do sistema:
chronyd -Q 'pool pool.ntp.org iburst'
Acredito que todos esses são métodos para detectar (sem alterar) a diferença de horário entre o horário NTP da Internet e o horário do sistema.
Responder2
Duvido que isso seja possível ntpd
pronto para uso:
- No fundo,
ntpd
não mantém um "terceiro" relógio.(Onde os dois primeiros são osrelógio do sistema e relógio monotônico). - Funcionalmente
ntpd
foi escrito para fazer ajustes não apenas na hora atual,mas também ajustar os parâmetros que controlam a velocidade de execução do relógio do sistema. Implicitamente, foi escrito para monitorar o efeito desses ajustes.
Juntando esses dois, é altamente improvável que o ntpd tenha um modo que possa manter adequadamente os valores desses parâmetros sem fazer ajustes em tempo real paraaclock, onde o único relógio disponível é o relógio do sistema.
Na sua pergunta não está claro se você realmente precisa ntpd
. Qualquer cliente [S]NTP serviria.
Se você se sentir confortável com um pouco de código, poderá criar algo que possa pesquisar os servidores sem recalibrar o relógio do sistema.
Por exemplo, existe uma biblioteca NTP para python chamadantplib. Um script para imprimir o deslocamento em uma enquete de 60 segundos pode ser assim:
import ntplib
import sys
import time
def main(*args):
ntp_client = ntplib.NTPClient()
while True:
for server in args:
try:
response = ntp_client.request(server, version=3)
print(response.offset)
time.sleep(60)
except ntplib.NTPException:
print("query failed: {}".format(server))
if __name__ == "__main__":
if len(sys.argv) == 1:
# Do not use this server for commertial software without permission
main('pool.ntp.org')
else:
main(sys.argv[1:])
Coloque isso em um arquivo ntp_check.py
. Certifique-se de ter o ntplib instalado com pip install ntplib
disrebutions específicos ( apt-get install python3-ntplib
). Então chame com:
python3 ntp_check.py