如何在几秒钟内确定SunOS UNIX盒上的正常运行时间?
在Linux上,我可以简单地说cat / proc / uptime&采取第一个论点:
cat /proc/uptime | awk '{print $1}'
我正在尝试在SunOS UNIX机器上执行相同的操作,但没有/ proc /正常运行时间。 有一个uptime命令,它提供以下输出:
$ uptime
12:13pm up 227 day(s), 15:14, 1 user, load average: 0.05, 0.05, 0.05
我真的不想编写代码来将日期转换为仅秒和&我敢肯定以前有人必须有这个要求,但我无法在互联网上找到任何东西。
有人能告诉我如何在几秒钟内获得正常运行时间吗?
TIA
答案 0 :(得分:5)
如果您不介意编译小型C程序,可以使用:
#include <utmpx.h>
int main ( )
{
int nBootTime = 0;
int nCurrentTime = time ( NULL );
struct utmpx * ent;
while ( ( ent = getutxent ( ) ) ) {
if ( !strcmp ( "system boot", ent->ut_line ) ) {
nBootTime = ent->ut_tv.tv_sec;
}
}
printf ( "System was booted %d seconds ago\n", nCurrentTime - nBootTime );
}
答案 1 :(得分:3)
一个相当不正统的方法可能是这个(帮助我,因为kstat产生了一些没有通过cron的结果:
RunTime=""
RunTime=`kstat -p unix:0:system_misc:snaptime | awk '{print $2}' | cut -d "." -f1`
echo $RunTime
RunTime=`expr $RunTime / 1`
RunDays=`expr $RunTime / 86400`
RunHours=`expr $RunTime % 86400 / 3600`
RunMinutes=`expr $RunTime % 3600 / 60`
RunSeconds=`expr $RunTime % 60`
希望它可以帮助你 - 好的副作用:你有时间位可用于计算。
答案 2 :(得分:2)
这是已经给出的一些答案的混合。仅使用两个命令以秒为单位输出正常运行时间在Solaris 9和10上测试。
kstat -p unix:0:system_misc:boot_time | nawk '{printf "%d\n", srand()-$2}'
答案 3 :(得分:1)
感谢Andre提供的解决方案可以提供秒。 如果有人在没有编译的情况下寻找答案,则可以使用此脚本。请注意,由于“uptime”命令不提供秒数,因此解决方案在运行时为0到59秒之间的任何值:
days=`uptime | awk '{print \$3}'`
hrs=`uptime | awk '{print \$5}' | sed 's/[:,]/ /g' | awk '{print \$1}'`
mins=`uptime | awk '{print \$5}' | sed 's/[:,]/ /g' | awk '{print \$2}'`
uptimesecs=$(($mins*60))
uptimesecs=$(($hrs*3600+$uptimesecs))
uptimesecs=$(($days*86400+$uptimesecs))
echo "$uptimesecs seconds uptime (to within 59 secs)."
希望对某人有用: - )
答案 4 :(得分:0)
Perl:CPAN提供unix :: uptime - 但是,它目前不兼容SunOS,但可能在将来。
答案 5 :(得分:0)
这是一个提供第二种解决方案的shell脚本。请注意,您需要root才能使其正常工作。
#!/bin/ksh
now=$(nawk 'BEGIN{print srand()}')
i=$(apptrace -fv 'getutxent' uptime 2>&1 | grep time_t | tail +2 | head -1 | nawk '{print $3}')
ut=$(bc <<-%EOF%
ibase=16
$(print $i | sed 's/0x//' | tr "[a-f]" "[A-F]")
%EOF%
)
s=$((now-ut))
h=$((s/3600))
s=$((s-(h*3600)))
m=$((s/60))
s=$((s-(m*60)))
d=$((h/24))
h=$((h-(d*24)))
printf "%d seconds - %d day(s) %02d:%02d:%02d\n" $((now - ut)) $d $h $m $s
答案 6 :(得分:0)
您可以使用kstat查找系统正常运行时间。
$kstat -p unix:0:system_misc:boot_time
这将以unix格式返回值。下面的代码对我来说非常有用,以秒为单位获取值。
#!/usr/bin/perl -w
use strict;
my $KSTAT = '/usr/bin/kstat -p';
my $STATISTIC = 'unix:0:system_misc:boot_time';
my $uptime = `$KSTAT $STATISTIC | awk '{print \$2}'`;
sprintf "%0.2f\n", (time() - $uptime);
答案 7 :(得分:0)
使用truss提取目录/ proc / 0的创建时间。 (必须以root身份运行。)
#!/bin/bash
btime=$(truss -v lstat -t lstat ls -ld /proc/0 2>&1 | awk '/ct = /{print $9}' | cut -d. -f1)
答案 8 :(得分:0)
在date命令上使用truss获取纪元时间并减去从kstat获得的启动时间。
expr `truss date 2>&1 |grep '^time()' |tr -cd "[0-9]"` - `kstat -p unix:0:system_misc:boot_time|cut -f2`