void <[email protected]> wrote:

> Hi,
>
> In /etc/sysctl.conf I have
>
> kern.msgbuf_show_timestamp=1
>
> and so dmsg has things like
>
> [1353919] swp_pager_getswapspace(32): failed
>
> the [1353919] I guess being the timestamp.
>
> But what is it?
>
> Seconds since boot?
>
> If it's that, then where can the true boot time be 
> found?

Yes! You can get the value from sysctl kern.boottime.

Here is a small program I wrote a while back, just call it
as a dmesg substitute.

It uses gawk because of strftime, but now that native awk handles strftime,
it could be converted to use that (gensub will have to be modified)

gawk is in lang/gawk

Incidentally, if you put the kern.msgbuf_show_timestamp=1
in boot/loader.conf instead, it starts much earlier in the boot process,
useful if you are anal about the format of bootup dmesg output!

Cheers, Jamie

#!/bin/sh -efu
set -efu

boottime="$(/sbin/sysctl -n kern.boottime | /usr/local/bin/gawk '{printf "%d", 
gensub ("^.* sec = ([1-9][0-9]*), .*$", "\\1", 1)}')"

[ -z "$(printf '%s' "$boottime" | /usr/bin/egrep '^0$|^[1-9][0-9]*$')" ] && { 
printf 'Invalid boottime retrieved.\n' >& 2; exit 1; }

/sbin/dmesg "$@" | /usr/local/bin/gawk -v boottime="$boottime" '

    {
      uptime = gensub ("^\\[([1-9][0-9]*)\\] .*$", "\\1", 1)
      if (uptime == $0) realtime = "??? ?? ??:??;??"
       else realtime = strftime ("%b %d %T", uptime + boottime)

      print realtime " " $0
    }'

Reply via email to