缘起
在工作中发现有获取linux具体开关机时间和类型的需求,可以通过分析/var/log/wtmp
日志文件得到。
通过last -x -F
可以将/var/log/wtmp
输出以下格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| root pts/1 172.16.3.245 Sun Jun 12 10:14:47 2016 - Tue Jun 14 08:34:31 2016 (1+22:19) root pts/0 172.16.3.245 Sun Jun 12 10:14:37 2016 - Tue Jun 14 08:34:25 2016 (1+22:19) root ttyS0 Sun Jun 12 10:14:24 2016 - down (5+03:49) runlevel (to lvl 3) 3.10.0 Sun Jun 12 10:14:17 2016 - Fri Jun 17 14:03:40 2016 (5+03:49) root pts/1 172.16.3.145 Sun Jun 12 10:13:57 2016 - Sun Jun 12 10:13:57 2016 (00:00) reboot system boot 3.10.0 Sun Jun 12 10:13:18 2016 - Fri Jun 17 14:03:40 2016 (5+03:50) shutdown system down 3.10.0 Sun Jun 12 10:12:51 2016 - Sun Jun 12 10:13:18 2016 (00:00) root pts/1 172.16.3.145 Sun Jun 12 10:12:47 2016 - down (00:00) root pts/20 172.16.3.211 Sun Jun 12 10:07:58 2016 - down (00:04) root pts/19 172.16.3.119 Sun Jun 12 10:07:50 2016 - down (00:05)
... root pts/3 172.16.3.145 Sun Jun 12 09:10:15 2016 - down (01:02) root pts/2 172.16.3.145 Sun Jun 12 09:10:15 2016 - down (01:02) root tty1 Sun Jun 12 09:09:37 2016 - down (01:03) runlevel (to lvl 3) 3.10.0 Sun Jun 12 09:09:22 2016 - Sun Jun 12 10:12:51 2016 (01:03) root pts/1 172.16.3.245 Sun Jun 12 09:09:10 2016 - Sun Jun 12 10:12:47 2016 (01:03) reboot system boot 3.10.0 Sun Jun 12 09:07:24 2016 - Sun Jun 12 10:12:51 2016 (01:05) root pts/14 172.16.3.211 Sun Jun 12 08:57:19 2016 - crash (00:10) root pts/7 172.16.3.245 Sun Jun 12 08:52:13 2016 - crash (00:15) root pts/11 172.16.3.245 Sun Jun 12 08:51:38 2016 - crash (00:15) root pts/10 172.16.3.211 Sun Jun 12 08:46:06 2016 - crash (00:21) root pts/9 172.16.3.30 Sun Jun 12 08:41:33 2016 - crash (00:25)
|
性空
具体一条记录
用户 |
终端类型 |
登录ip |
开始时间 |
结束时间 |
持续时长 |
root |
pts/5 |
172.16.3.129 |
Fri Jun 17 14:03:50 2016 |
Fri Jun 17 14:03:42 2016 |
(00:00) |
每一行为一条会话记录,有以下6个部分。
- 用户名
- linux用户名
- reboot 系统关机或重启
- shutdown 关机
- 终端类型
- 登录ip
- 开始时间(可靠)
- 结束时间(不可靠)
- 具体时间:结束时间,若不正常关机,此时间就不准确
- down:系统关机退出
- crash:系统不正常关机退出
- 持续时长
分析开关机时间思路
- 首先找到开始为
reboot
的行,获取此行的“开始时间”得到这一次的开机时间。
- 如果
reboot
行的下一行为shutdown
,则为正常关机,获取此行的“开始时间”得到关机时间。若持续时间为(00:00)
则为重启。
- 如果
reboot
行的下一行不为shutdown
,则为不正常关机,下面的登录会话的“结束时间”必然伴随着crash
。找到最近的一条crash
记录,拿到这条记录的“开始时间”和“持续时长”,相加即是关机时间。