如何在几分钟内找出并保存到Solaris上的文件正常运行时间,而无需剪切和转换它?这有什么优雅的方式吗?谢谢你的回答
答案 0 :(得分:4)
这是一种可靠而准确的方法来获取自Solaris上次启动以来的分钟数:
kstat -n system_misc |
nawk '/boot_time/ {printf("%d minutes\n",(srand()-$2)/60)}'
在nawk
下,srand()
函数返回自纪元以来的秒数,而boot_time
kstat
统计信息返回自启动时的纪元以来的秒数。从后者中减去前者给出了秒数,并将其进一步除以60得出自上次启动以来的分钟数。
答案 1 :(得分:3)
在Solaris上,uptime(1)
命令只是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
并包含引导时间的秒和微秒。由此可以计算出系统启动的时间。
(编辑:我刚注意到shell标签。这个解决方案更适合从C程序调用。哦,好吧,也许对某人有用。)
答案 2 :(得分:0)
不完全确定这适用于Solaris但是......
uptime | awk -F ',' ' {print $1} ' | awk ' {print $3} ' | awk -F ':' ' {hrs=$1; min=$2; print hrs*60 + min} '
答案 3 :(得分:0)
@ jilliagre建议的一个小改进是使用kstat(1m)在传递给nawk(1)之前为你提取更多信息:
$ kstat -p -n system_misc -s boot_time| nawk '{printf("%d minutes\n",(srand()-$2)/60)}'
26085 minutes
-p
表示“可解析输出”,-s
选择-n
模块名称下的特定统计信息。