Eu tenho um Raspberry Pi e a cada reinicialização vejo esta saída por último:
root@RaspberryPi:~# last | grep boot
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 still running
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 still running
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 - 23:01 (17305+22:01)
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 - 23:01 (17305+22:01)
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 - 23:01 (17305+22:01)
Isso ocorre apesar de ter um hwclock falso e um RTC de hardware instalados.
Atualmente o serviço para fake-hwclock.service começa antes de sysinit.target, assim:
[Unit]
Before=sysinit.target
[Service]
ExecStart=/sbin/fake-hwclock load
[Install]
WantedBy=sysinit.target
Como faço para que ele seja executado antes que /var/log/wtmp seja atualizado?
Responder1
Acredito que seja um bug no systemd-update-utmp. Veja meu comentário aqui:https://github.com/systemd/systemd/issues/6057#issuecomment-435247567
Uma solução alternativa é executar o fake-hwclock no initramfs, antes de passar o controle para a instância principal do systemd.
Responder2
Os registros de login wtmp "reboot" são gerenciados pelo serviço systemd-update-utmp systemd. Ele deve iniciar antes do destino sysinit, o que significa que antes que o início seja concluído, este serviço será iniciado SE ainda não tiver sido iniciado. Isso não significa que o systemd-timesyncd será necessariamente iniciado antes do systemd-update-utmp.
Eu testei em meu servidor Arch Linux e consistentemente o systemd-timesyncd sempre roda bem antes do systemd-update-utmp. Por outro lado, eles estão quase sempre a um pid de distância um do outro.
Mas como não está sendo executado explicitamente após o NTP, suponho que isso ainda deva ser considerado um bug.
Do manual do systemd:
"Depois = é oinversode Antes=, ou seja, enquanto Depois= garante que a unidade configurada seja iniciada após a unidade listada terminar de inicializar"
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
O que você deveria fazer:
systemctl edit systemd-update-utmp
[Unit]
After=systemd-timesyncd.service
Wants=systemd-timesyncd.service