获取远程服务器上虚拟机的开机时间

云淡风轻2020 2011-08-11 10:37:58
如何在本地获得远程服务器上虚拟机开机时间的获取。
首先的思路是想用libvirt的virsh命令来取,但是看了一边它的API,没有相应的命令可用。
于是转换思路,考虑linux系统中会有记录系统文件的日志,打算从此处入手,发现存放记录系统时间的目录为/var/log/wtmp.用last -f wtmp 可以查看到时间如下:
pts/9 :0.0 Wed Aug 10 13:43 still logged in
pts/4 :0.0 Wed Aug 10 13:30 still logged in
pts/8 :0.0 Wed Aug 10 11:08 - 13:28 (02:20)
pts/7 :0.0 Wed Aug 10 09:35 - 10:55 (01:19)
pts/6 :0.0 Wed Aug 10 09:32 - 12:46 (03:13)
pts/5 :0.0 Wed Aug 10 09:24 - 11:26 (02:02)
pts/0 :0.0 Wed Aug 10 09:09 - 14:49 (05:39)
tty1 :0 Wed Aug 10 08:59 still logged in
reboot system boot 2.6.35.6-45.fc14 Wed Aug 10 08:58 - 15:25 (06:26)
pts/6 :0.0 Tue Aug 9 19:17 - 19:42 (00:25)
pts/5 :0.0 Tue Aug 9 18:43 - 19:42 (00:59)
pts/0 :0.0 Tue Aug 9 18:28 - 19:42 (01:13)
tty1 :0 Tue Aug 9 18:28 - down (01:14)
reboot system boot 2.6.35.6-45.fc14 Tue Aug 9 18:28 - 19:43 (01:15)
pts/0 :0.0 Tue Aug 9 18:10 - 18:21 (00:10)
tty1 :0 Tue Aug 9 18:10 - down (00:11)
reboot system boot 2.6.35.6-45.fc14 Tue Aug 9 18:10 - 18:21 (00:11)
pts/10 :0.0 Tue Aug 9 16:22 - 17:56 (01:34)
pts/8 :0.0 Tue Aug 9 15:08 - 17:57 (02:48)
pts/7 :0.0 Tue Aug 9 15:07 - 15:08 (00:01)
pts/6 :0.0 Tue Aug 9 10:41 - 15:07 (04:25)
pts/5 :0.0 Tue Aug 9 10:41 - 10:41 (00:00)
pts/4 :0.0 Tue Aug 9 10:39 - 10:41 (00:01)
pts/0 :0.0 Tue Aug 9 09:24 - 17:57 (08:32)

可以显示十几天的时间记录。但是这里有个问题,该文件下记录的所有时间里并不包括虚拟机的。不过问题已有端倪。这里pts从0开始,并且每记录一个设备时间就依次加一,可以看到上图pts并不是从0依次到最大,而是中间有间断,于是考虑到缺少的pts号即为虚拟机的pts。
继续用virsh命令来寻找相关帮助,通过virsh dumpxml vmname查看虚拟机配置的xml文件,终于发现存放记录虚拟机时间的文件位置,XML文档部分内容:
<console type='pty' tty='/dev/pts/1'>
<source path='/dev/pts/1'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
tty的属性值即为所需,并且/dev/pts/* 随着虚拟机的开机而创建,关机而销毁。用stat 命令可以取得相关信息

[root@nicai pts]# stat 1
File: `1'
Size: 0 Blocks: 0 IO Block: 1024 character special file
Device: ah/10d Inode: 4 Links: 1 Device type: 88,1
Access: (0620/crw--w----) Uid: ( 107/ qemu) Gid: ( 5/ tty)
Access: 2011-08-10 08:58:38.178742005 +0800
Modify: 2011-08-10 08:58:38.178742005 +0800
Change: 2011-08-10 08:58:38.178742005 +0800

stat -t name 可以取到转换成秒的时间。到这里,又一个问题产成了,取到的时间并没有文件创建的时间,只有Access、Modify、Change三个时间,创建时间是linux系统里所未提供的,但是如果不对文件修改,创建时间=修改时间。通过在虚拟机上进行操作验证,发现/dev/pts/*的文件如果不是人为修改,它所记录的Modify是不会发生变化的 ,也就是虚拟机的开机时间。
献给有需要的朋友,如果有什么不足之处也望大家指出,欢迎鲜花和砖头!!!
...全文
256 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-08-11
  • 打赏
  • 举报
回复
你可以使用SNMP协议,SNMP里记录了系统启动到现在运行的时间。
云淡风轻2020 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 axengine 的回复:]

你可以使用SNMP协议,SNMP里记录了系统启动到现在运行的时间。
[/Quote]
我要取得是虚拟机的时间

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧