Estou tentando definir um horário falso no Ubuntu 18.04 (systemd 237) para testar a execução de uma tarefa periódica mensal.
Isso está sendo executado em uma máquina virtual (virtualbox com adições de convidados).
A hora é redefinida para a hora correta após alguns segundos, mesmo que a sincronização ntp tenha sido desativada.
Exemplo.
# Disable the sync
timedatectl set-ntp 0
# There aren't any ntp daemons running
systemctl -a | grep ntp # Returns nothing
# This confirms there is no sync active
timedatectl status
# Local time: Mo 2019-03-11 15:22:13 CET
# Universal time: Mo 2019-03-11 14:22:13 UTC
# RTC time: Mo 2019-03-11 14:22:13
# Time zone: Europe/Berlin (CET, +0100)
# System clock synchronized: no
# systemd-timesyncd.service active: no
# RTC in local TZ: no
# Setting up the fake time
timedatectl set-time '2015-11-20 16:14:50'
# It worked! Wuhuu!
timedatectl status
# Local time: Fr 2015-11-20 16:14:51 CET
# Universal time: Fr 2015-11-20 15:14:51 UTC
# RTC time: Fr 2015-11-20 15:14:51
# Time zone: Europe/Berlin (CET, +0100)
# System clock synchronized: no
# systemd-timesyncd.service active: no
# RTC in local TZ: no
# 5 sec later
timedatectl status
# Local time: Mo 2019-03-11 15:25:35 CET
# Universal time: Mo 2019-03-11 14:25:35 UTC
# RTC time: Fr 2015-11-20 15:14:51
# Time zone: Europe/Berlin (CET, +0100)
# System clock synchronized: no
# systemd-timesyncd.service active: no
# RTC in local TZ: no
Se não houver serviço de sincronização, o que o mantém sincronizado?
Mas existe. Ele está embutido no serviço VirtualBox que é executado no sistema operacional convidado.
Infelizmente, o
VBoxService
serviço no sistema operacional convidado faz muitas coisas em um, e interrompê-lo elimina completamente tudo o que ele faz. O único controle refinado disponível, já que o controle via ferramentas nativas de gerenciamento de serviços não é, é a ferramenta da Oracle:Isso não desabilita o encadeamento do serviço de sincronização por si só. Faz a chamada do hypervisor que o encadeamento invoca a falha de retorno. O encadeamento do serviço de sincronização continua a ser executado. Ele apenas falha repetidamente ao obter a hora do host.
Leitura adicional
systemd-timesyncd
nos convidados do VirtualBox . Erro Debian #812522.Isso parece ser causado por um serviço da VM para sincronizar com o sistema host. No meu caso (Virtualbox) desabilitar o serviço resolveu o problema.
Existem soluções mais sofisticadas especificadas em outras respostas/comentários, mas exigem a execução de uma etapa no lado do host. Para o meu caso, isso foi mais simples de documentar, pois todos os testes relacionados a esse mock precisam ser executados no convidado.