只需几秒钟即可获得 SunOS UNIX 机器的正常运行时间

发布于 2024-08-09 05:03:38 字数 447 浏览 11 评论 0原文

如何确定 SunOS UNIX 机器上的正常运行时间(仅以秒为单位)?

在 Linux 上,我可以简单地 cat /proc/uptime &采用第一个参数:

cat /proc/uptime | awk '{print $1}'

我试图在 SunOS UNIX 机器上执行相同的操作,但没有 /proc/uptime。 有一个 uptime 命令显示以下输出:

$ uptime
12:13pm  up 227 day(s), 15:14,  1 user,  load average: 0.05, 0.05, 0.05

我真的不想编写代码将日期仅转换为秒 &我确信以前一定有人有过这个要求,但我在互联网上找不到任何东西。

谁能告诉我如何在几秒钟内获得正常运行时间?

TIA

How do I determine the uptime on a SunOS UNIX box in seconds only?

On Linux, I could simply cat /proc/uptime & take the first argument:

cat /proc/uptime | awk '{print $1}'

I'm trying to do the same on a SunOS UNIX box, but there is no /proc/uptime.
There is an uptime command which presents the following output:

$ uptime
12:13pm  up 227 day(s), 15:14,  1 user,  load average: 0.05, 0.05, 0.05

I don't really want to have to write code to convert the date into seconds only & I'm sure someone must have had this requirement before but I have been unable to find anything on the internet.

Can anyone tell me how to get the uptime in just seconds?

TIA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

夏雨凉 2024-08-16 05:03:38

如果您不介意编译一个小型 C 程序,您可以使用:

#include <stdio.h>
#include <string.h>
#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 );
  endutxent();

  return 0;
}

来源: http://xaxxon.slackworks .com/rsapi/

If you don't mind compiling a small C program, you could use:

#include <stdio.h>
#include <string.h>
#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 );
  endutxent();

  return 0;
}

Source: http://xaxxon.slackworks.com/rsapi/

鸢与 2024-08-16 05:03:38

这是已经给出的一些答案的混合。只需两个命令即可输出正常运行时间(以秒为单位)。在 Solaris 9 和 10 上测试。

kstat -p unix:0:system_misc:boot_time | nawk '{printf "%d\n", srand()-$2}'

This is a mix of some answers already given. Outputs uptime in seconds with only two commands. Tested on Solaris 9 and 10.

kstat -p unix:0:system_misc:boot_time | nawk '{printf "%d\n", srand()-$2}'
深海里的那抹蓝 2024-08-16 05:03:38

一个相当非正统的方法可能是这样的(帮助我,因为 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`

希望它能帮助你 -
好的副作用:您有可用于计算的时间位。

A rather unorthodox method might be this (helped me out since the kstat yielded some weired results that did not pass 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`

Hope it helps you out -
Nice side effect: You have the time bits available for calculations.

寄与心 2024-08-16 05:03:38

感谢安德烈提供了一个可以提供几秒钟的解决方案。
如果有人想在不编译的情况下寻找答案,可以使用这个脚本。请注意,由于“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)."

希望这对某人有用:-)

Thanks to Andre for a solution that will provide seconds.
If anyone is looking for an answer without compiling, this script can be used. Note, as the "uptime" command does not provide seconds the solution is anything from 0 to 59 seconds out when it is run:

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)."

Hope that's of use to someone :-)

归途 2024-08-16 05:03:38

Perl:CPAN 提供 unix::uptime - 然而,它目前与 SunOS 不兼容,但将来可能会兼容。

Perl: CPAN provides unix::uptime - however, it is not currently compatible with SunOS but may be in the future.

如此安好 2024-08-16 05:03:38

这是提供第二个解决方案的 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

Here is a shell script that provides second resolution. Note that you need to be root for it to work.

#!/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
迷鸟归林 2024-08-16 05:03:38

您可以使用 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);

You can use kstat to find the system uptime.

$kstat -p unix:0:system_misc:boot_time

This will return the values in unix format. Below is the code which was very useful for me to get the values in sec.

#!/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);
微暖i 2024-08-16 05:03:38

使用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)

Use truss to extract the creation time of the directory /proc/0. (Must be run as root.)

#!/bin/bash

btime=$(truss -v lstat -t lstat ls -ld /proc/0 2>&1 | awk '/ct = /{print $9}' | cut -d. -f1)
静待花开 2024-08-16 05:03:38

在 date 命令上使用 truss 来获取纪元时间并减去从 kstat 获得的启动时间。

expr `truss date 2>&1 |grep '^time()' |tr -cd "[0-9]"` - `kstat -p unix:0:system_misc:boot_time|cut -f2`

Use truss on the date command to get epoch time and subtract boot time obtained from kstat.

expr `truss date 2>&1 |grep '^time()' |tr -cd "[0-9]"` - `kstat -p unix:0:system_misc:boot_time|cut -f2`
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文