On Fri, Dec 19, 2025 at 1:38 PM Jamie Landeg-Jones <[email protected]>
wrote:

> 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
>     }'
>

Very cool!

Warner

Reply via email to