如何在几分钟内找出正常运行时间?

How to find out uptime in minutes?

如何在不剪切和转换的情况下在几分钟内找出并保存到 Solaris 上的文件正常运行时间?有什么优雅的方法吗?感谢回答

不完全确定这是否适用于 Solaris 但是...

uptime | awk -F ',' ' {print } ' | awk ' {print } ' | awk -F ':' ' {hrs=; min=; print hrs*60 + min} '

在 Solaris 上,uptime(1) 命令只是 link 到 w(1)。您可以在 https://github.com/illumos/illumos-gate/blob/master/usr/src/cmd/w/w.c.

找到它的源代码

在那里,你会发现uptime(1)得到了/var/run/utmpx中记录的开机时间。正如他们所做的那样,您可以使用 getutxent(3) 系列函数从该文件中读取数据,并使用 ut_type == BOOT_TIME 查找记录。在这条记录中,查看 ut_tv 字段,它是一个 struct timeval 并且包含启动时间的秒和微秒。由此您可以计算出系统已经运行了多长时间。

(编辑:我刚刚注意到 标记。此解决方案更适合从 C 程序调用。哦,好吧,也许对某人有用。)

这是获取自上次在 Solaris 上启动以来的分钟数的可靠且准确的方法:

kstat -n system_misc | 
    nawk '/boot_time/ {printf("%d minutes\n",(srand()-)/60)}'

nawk 下,srand() 函数 returns 自纪元以来的秒数,而 boot_time kstat 统计 returns自启动时纪元以来的秒数。后者减去前者得到秒数,再除以 60 得到自上次启动后的分钟数。

@jilliagre 的建议的一个小改进是在传递给 nawk(1) 之前使用 kstat(1m) 为您提取更多信息:

$ kstat -p -n system_misc -s boot_time| nawk '{printf("%d minutes\n",(srand()-)/60)}'
26085 minutes

-p 表示 "parseable output",-s 选择 -n 模块名称下方的特定统计信息。