如何在几秒钟内获得 IBM AIX 机器的正常运行时间?
我正在编写一个 Perl 脚本,我需要在商店中的所有机器(即 Linux、SunOS 和 AIX)中以秒为单位的正常运行时间来进行一些计算。我有办法获得 linux (/proc/uptime) 和 SunOS (kstat -p unix:0:system_misc:boot_time) 的正常运行时间,这要归功于本网站上的另一篇文章,但我可以找到一种获得的好方法适用于 AIX。我真的不喜欢用 reg-ex 解析正常运行时间的想法,因为当机器运行了几秒、几分钟、几天或一年多时,正常运行时间就会发生变化。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
此 C 代码片段适用于 AIX 6.1。
我不能给你源文章,因为我只剩下源代码。
This snippet in C works under AIX 6.1.
I can't give you the source article as I only have source code left.
解析
last(1)
的输出?找到一个仅在启动时创建/刷新的文件/目录并统计它?
坦率地说,使用不同的正则表达式来处理
uptime
的不同可能输出听起来不错。Parse the output of
last(1)
?Find a file/directory that is only created/refreshed at boot time and stat it?
Frankly, using different regexs to handle the different possible outputs from
uptime
doesn't sound so bad.为新感兴趣的绊脚石回答旧线程。
我们将制作一个名为
getProcStartTime
的轻量级 C 程序,您将有很多其他用途。给定 PID,它会告诉您进程何时启动。我相信,即使该过程是几个月或几年前开始的,您仍然会得到精确到秒的时间戳。将此源代码保存为名为 getProcStartTime.c 的文件:然后编译它:
这是神奇的逻辑:AIX 就像 Linux 一样,有一个名为
init
的进程,PID 为 1。不会被杀死或重新启动。所以PID 1的启动时间就是你的服务器的启动时间。在我的服务器上,返回Wed Apr 23 10:33:30 2014;你的会有所不同。
请注意,我最初专门为此目的创建了
getProcStartTime
,但现在我在各种其他脚本中使用它。想知道Oracle数据库已经运行了多久?找到 Oracle PMON 的 PID,并将该 PID 作为getProcStartTime
之后的参数传递。如果您确实希望输出为整数秒,则修改上面的代码将是一个简单的编程练习。名称
getProcUptime
只是一个建议。然后您可以调用:更新: AIX 6.1/7.1 的源代码和预编译二进制文件已放在我的 Github 存储库中:https://github.com/Josholith/getProcStartTime
Answering old thread for new interested stumblers.
We're going to make a lightweight C program called
getProcStartTime
that you'll have plenty of other uses for. It tells you when a process was started, given the PID. I believe you will still get a time stamp down to the second even if the process was started months or years ago. Save this source code as a file called getProcStartTime.c:Then compile it:
Here's the magic logic: AIX just like Linux has a process called
init
with PID 1. It can't be killed or restarted. So the start time of PID 1 is the boot time of your server.On my server, returns Wed Apr 23 10:33:30 2014; yours will be different.
Note, I originally made
getProcStartTime
specifically for this purpose, but now I use it in all kinds of other scripts. Want to know how long an Oracle database has been up? Find the PID of Oracle's PMON and pass that PID as your arg aftergetProcStartTime
.If you really want the output as an integer number of seconds, it would be an easy programming exercise to modify the code above. The name
getProcUptime
is just a suggestion. Then you could just call:UPDATE: Source code and precompiled binary for AIX 6.1/7.1 have been put on my Github repo here: https://github.com/Josholith/getProcStartTime