GNU/Linux >> Znalost Linux >  >> Linux

dmesg čas vs systémový čas není správný

Řešení 1:

dmesg pouze vytiskne kruhový buffer jádra, který zaznamenává zprávy s dobou provozuschopnosti v sekundách od spuštění jako časové razítko.

Pokud tedy použijete volbu -T, všechny tyto hodnoty doby provozu jsou pouze přidány k datu zavedení vašeho systému. Pokud jste někdy spali v režimu pozastavení nebo obnovení, jsou ztraceny, takže v těchto případech není možnost -T užitečná, protože hodnoty data/času nejsou správné v té době ani v minulosti.

Řešení 2:

Chcete-li ověřit svou teorii (která je mimochodem správná), proveďte jako root následující:

hwclock --show

To vám ukáže vaše hardwarové hodiny na serveru, na kterém provádíte příkaz.

Chcete-li synchronizovat hardwarové hodiny s vaším systémovým časem (který spravuje ntp), spusťte následující příkaz:

hwclock --systohc --utc

Poslední argument (--utc) říká hwclock, aby uložil čas do hardwarových hodin v koordinovaném univerzálním čase.

Navíc mějte prosím na paměti, že manuálová stránka pro dmesg(1) říká následující, takže chování, které zažíváte, je zdokumentované a platné:

   -T, --ctime
          Print human-readable timestamps.

          Be aware that the timestamp could be inaccurate!  The time
          source used for the logs is not updated after system
          SUSPEND/RESUME.

Řešení 3:

Chcete-li získat přesné časy pro „nedávné“ záznamy v dmesg , mohli byste převést časová razítka dmesg do reálného času s trochou hackování výstupu.

Termínem "nedávno" mám na mysli časy po posledním pozastavení/obnovení, protože (jak již uvedli ostatní) časy pozastavení se nezapočítávají do časového razítka dmesg.

Ale pokud to potřebujete často, jako na notebooku, můžete do funkcí nebo aliasů vložit něco jako následující:

# write current time to kernel ring buffer so it appears in dmesg output
echo "timecheck: $(date +%s) = $(date +%F_%T)" | sudo tee /dev/kmsg

# use our "timecheck" entry to get the difference
# between the dmesg timestamp and real time
offset=$(dmesg | grep timecheck | tail -1 \
| perl -nle '($t1,$t2)=/^.(\d+)\S+ timecheck: (\d+)/; print $t2-$t1')

# pipe dmesg output through a Perl snippet to
# convert it's timestamp to correct readable times
dmesg | tail \
| perl -pe 'BEGIN{$offset=shift} s/^\[(\d+)\S+/localtime($1+$offset)/e' $offset

# or use this instead to keep dmesg colors
dmesg --color=always | tail \
| perl -pe 'BEGIN{$offset=shift} s/^(\x1b\[.*?m)?\[(\d+)\S+/$1.localtime($2+$offset)/e' $offset

Ukázkový výstup:

...
Sat Jun 29 11:12:28 2019 wlp3s0: Limiting TX power to 30 (30 - 0) dBm as advertised by 10:5a:f7:53:1d:0f
Sat Jun 29 11:12:28 2019 IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
Sat Jun 29 11:34:16 2019 timecheck: 1561800856 = 2019-06-29_11:34:16
Sat Jun 29 12:10:11 2019 wlp3s0: cannot understand ECSA IE operating class, 5, ignoring

V porovnání s originálem dmesg výstup (který je vypnutý o 3 dny):

$ dmesg | tail -4
[249424.746958] wlp3s0: Limiting TX power to 30 (30 - 0) dBm as advertised by 10:5a:f7:53:1d:0f
[249424.749662] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
[250732.318826] timecheck: 1561800856 = 2019-06-29_11:34:16
[252887.828699] wlp3s0: cannot understand ECSA IE operating class, 5, ignoring

$ dmesg -T | tail -4
[Wed Jun 26 17:59:09 2019] wlp3s0: Limiting TX power to 30 (30 - 0) dBm as advertised by 10:5a:f7:53:1d:0f
[Wed Jun 26 17:59:09 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
[Wed Jun 26 18:20:57 2019] timecheck: 1561800856 = 2019-06-29_11:34:16
[Wed Jun 26 18:56:52 2019] wlp3s0: cannot understand ECSA IE operating class, 5, ignoring

Linux
  1. Vrátí System.currentTimeMillis vždy hodnotu >=předchozí volání?

  2. Nastavte systémové datum a čas pomocí C++ v Linuxu

  3. Získání data a času spuštění systému v Linuxu

  1. Není systémová výzva Ubuntu k zadání mého hesla spoofovatelná?

  2. Jak dlouho můj systém Linux běží?

  3. Jak Linux používá hodiny reálného času?

  1. Použití příkazu timedatectl ke změně času a data v systému RHEL7 Linux

  2. Kgotobed ​​– modul jádra, který násilně vypne váš systém

  3. Jak změnit časové pásmo v Debian Linuxu