[linux] 시스템 부팅 시각및 시간 알아보기
로빈아빠
본문
시스템 부팅 시각및 시간 알아보기
- 작성자 : 김칠봉 <san2(at)linuxchannel.net>
- 작성일 : 2002.11.09
- 분 류 : 시스템관리(SE)
- 수 준 : 초보
- 내 용 : 시스템 부팅 시각(시점)과 시간을 알아보는 방법
- 키워드 : uptime, last, /proc/uptime, /proc/stat, perl, PHP
*주)
이 문서에 대한 최신 내용은 아래 URL에서 확인할 수 있습니다.
http://www.linuxchannel.net/docs/sys-uptime.txt
[방법1] uptime 명령어
가장 간단한 방법입니다.
# uptime 9:01pm up 2:12, 1 user, load average: 0.00, 0.00, 0.00 #
현재 제 시스템은 부팅후 2시간 12분 지났군요.. 위의 오후 9시 01분부터 역으로 거슬러
올라가면 부팅 시각을 알 수 있겠죠.... (계산하지 마세요. T.T)
[방법2] last 명령어
# last | grep boot | head -n 1 reboot system boot 2.4.19-R2 Sat Nov 9 18:50 (02:12) #
제일 마지막의 (02:12) 값이 시스템 uptime 입니다. 즉 2시간 12분 지났다는 의미입니다. 그리고 'Sat Nov 9 18:50'은 시스템 boot time 입니다.
[방법3] /proc/uptime 이용
# cat /proc/uptime 7979.84 7961.31 #
첫번째 값은 시스템이 부팅후 현재 시각까지의 부팅 시간을 초단위로 표시한 sytem uptime 값입니다. 두번째 값은 'idle uptime' 입니다. (reference : /usr/src/linux/fs/proc/proc_misc.c)
위의 7979 초를 계산하니 시스템이 부팅된지 약 2시간 13분이되었군요. (uptime 명령어로 확인하면 거의 같은 값임)
그럼 좀더 정확하게 부팅 시각을 계산해 봅시다. 부팅후 구동 시간이 7979초이므로 현재 UNIX timestamp 값에서 7979초를 빼면 부팅시점의 Unix timestamp 값이 계산되죠.. 이 값을 perl의 gmdate()이나 PHP의 data() 함수를 이용하면 쉽게 부팅시점의 시각을 알 수 있습니다(C는 생략).
-- uptime.pl -------------------------------------------------------
#!/usr/bin/perl # # open(UPTIME, '/proc/uptime') or die "Can't open /proc/uptime\n"; while(<UPTIME>) { @uptime = $_; ## to array } close(UPTIME); $btime = time() - int $uptime[0]; $btime = gmtime($btime + (3600*9)); ## GMT+9 print "boot time : $btime\n"; exit 0;
(실행 결과)
# perl uptime.pl boot time : Sat Nov 9 18:49:55 2002 #
-- uptime.php ------------------------------------------------------
<팁> 실시간(1초간격)으로 uptime 보기
# watch -n 1 cat /proc/uptime
종료는 'Ctrl + C'
</팁>
<참고> PHP sysinfo(http://ftp.linuxchannel.net/devel/sysinfo.tar)
최근 버전에는 boot time을 추가되었습니다.
</참고>
[방법4] /proc/stat 이용
# cat /proc/stat cpu 1221 0 639 767372 cpu0 1221 0 639 767372 page 36710 5580 swap 1 0 intr 785185 769232 9 0 0 0 1 3 0 0 7363 8173 0 356 0 0 48 disk_io: (8,0):(3697,2449,73190,1248,11048) ctxt 177800 btime 1036835394 processes 753 #
8번째 항목의 btime 값(1036835394)이 바로 부팅시의 UNIX timestamp 값입니다. 이 값은 [방법3]에서 계산한 $btime 값과 같습니다(오차1초). 바꾸어 말하면 현재 UNIX timestamp 값에서 이 btime 값을 빼면 시스템 uptime 값이 나옵니다. 이 uptime 값은 [방법3]에서 얻은 $uptime[0] 값과 같습니다.
이번에는 이 btime 값을 얻어서 boot time을 출력하고 uptime 값을 계산하여 읽기 편하게 출력해 봅시다.
-- uptime2.pl -------------------------------------------------------
#!/usr/bin/perl # # reference : http://www.blackplasma.net/scripts/load # open(STAT, '/proc/stat') or "Can't open /proc/stat\n"; $i = 0; while(<STAT>) { $stat[$i] = $_; $i++; } close(STAT); $stat[7] =~ s/[^\d]+//g; ## change boot time(UNIX timestamp) $btime = gmtime($stat[7] + (3600*9)); $term = time() - $stat[7]; $uptime = &runtime($term); print "boot time\t: $btime\n"; print "system uptime\t: $uptime\n"; sub runtime { my($term) = @_; $days = int($term / 86400); $secs = int($term % 86400); $hours = int($secs / 3600); $secs = int($secs % 3600); $mins = int($secs / 60); $secs = int($secs % 60); $days = $days ? "${days}days" : ''; $hours = $hours ? " ${hours}hours" : ''; $mins = $mins ? " ${mins}minutes " : ''; $secs .= 'seconds'; return "$days$hours$mins$secs"; } exit 0
(헙... perl은 역시 어렵군요... T.T)
(실행 결과)
# perl uptime2.pl boot time : Sat Nov 9 18:49:54 2002 system uptime : 2hours 25minutes 29seconds #
-- uptime2.php ------------------------------------------------------
[방법5] 그 외에 부팅시 생성/갱신되는 로그 파일의 확인
# ls -l --full-time /var/log/dmesg -rw-r--r-- 1 root root 6867 Sat Nov 09 18:50:17 2002 /var/log/dmesg #
EOF
- 작성자 : 김칠봉 <san2(at)linuxchannel.net>
- 작성일 : 2002.11.09
- 분 류 : 시스템관리(SE)
- 수 준 : 초보
- 내 용 : 시스템 부팅 시각(시점)과 시간을 알아보는 방법
- 키워드 : uptime, last, /proc/uptime, /proc/stat, perl, PHP
*주)
이 문서에 대한 최신 내용은 아래 URL에서 확인할 수 있습니다.
http://www.linuxchannel.net/docs/sys-uptime.txt
[방법1] uptime 명령어
가장 간단한 방법입니다.
# uptime 9:01pm up 2:12, 1 user, load average: 0.00, 0.00, 0.00 #
현재 제 시스템은 부팅후 2시간 12분 지났군요.. 위의 오후 9시 01분부터 역으로 거슬러
올라가면 부팅 시각을 알 수 있겠죠.... (계산하지 마세요. T.T)
[방법2] last 명령어
# last | grep boot | head -n 1 reboot system boot 2.4.19-R2 Sat Nov 9 18:50 (02:12) #
제일 마지막의 (02:12) 값이 시스템 uptime 입니다. 즉 2시간 12분 지났다는 의미입니다. 그리고 'Sat Nov 9 18:50'은 시스템 boot time 입니다.
[방법3] /proc/uptime 이용
# cat /proc/uptime 7979.84 7961.31 #
첫번째 값은 시스템이 부팅후 현재 시각까지의 부팅 시간을 초단위로 표시한 sytem uptime 값입니다. 두번째 값은 'idle uptime' 입니다. (reference : /usr/src/linux/fs/proc/proc_misc.c)
위의 7979 초를 계산하니 시스템이 부팅된지 약 2시간 13분이되었군요. (uptime 명령어로 확인하면 거의 같은 값임)
그럼 좀더 정확하게 부팅 시각을 계산해 봅시다. 부팅후 구동 시간이 7979초이므로 현재 UNIX timestamp 값에서 7979초를 빼면 부팅시점의 Unix timestamp 값이 계산되죠.. 이 값을 perl의 gmdate()이나 PHP의 data() 함수를 이용하면 쉽게 부팅시점의 시각을 알 수 있습니다(C는 생략).
-- uptime.pl -------------------------------------------------------
#!/usr/bin/perl # # open(UPTIME, '/proc/uptime') or die "Can't open /proc/uptime\n"; while(<UPTIME>) { @uptime = $_; ## to array } close(UPTIME); $btime = time() - int $uptime[0]; $btime = gmtime($btime + (3600*9)); ## GMT+9 print "boot time : $btime\n"; exit 0;
(실행 결과)
# perl uptime.pl boot time : Sat Nov 9 18:49:55 2002 #
-- uptime.php ------------------------------------------------------
<?php $uptime = file('/proc/uptime'); $btime = time() - (int)$uptime[0]; echo 'boot time: ' . date('Y.m.d H:i:s',$btime); ?>
<팁> 실시간(1초간격)으로 uptime 보기
# watch -n 1 cat /proc/uptime
종료는 'Ctrl + C'
</팁>
<참고> PHP sysinfo(http://ftp.linuxchannel.net/devel/sysinfo.tar)
최근 버전에는 boot time을 추가되었습니다.
</참고>
[방법4] /proc/stat 이용
# cat /proc/stat cpu 1221 0 639 767372 cpu0 1221 0 639 767372 page 36710 5580 swap 1 0 intr 785185 769232 9 0 0 0 1 3 0 0 7363 8173 0 356 0 0 48 disk_io: (8,0):(3697,2449,73190,1248,11048) ctxt 177800 btime 1036835394 processes 753 #
8번째 항목의 btime 값(1036835394)이 바로 부팅시의 UNIX timestamp 값입니다. 이 값은 [방법3]에서 계산한 $btime 값과 같습니다(오차1초). 바꾸어 말하면 현재 UNIX timestamp 값에서 이 btime 값을 빼면 시스템 uptime 값이 나옵니다. 이 uptime 값은 [방법3]에서 얻은 $uptime[0] 값과 같습니다.
이번에는 이 btime 값을 얻어서 boot time을 출력하고 uptime 값을 계산하여 읽기 편하게 출력해 봅시다.
-- uptime2.pl -------------------------------------------------------
#!/usr/bin/perl # # reference : http://www.blackplasma.net/scripts/load # open(STAT, '/proc/stat') or "Can't open /proc/stat\n"; $i = 0; while(<STAT>) { $stat[$i] = $_; $i++; } close(STAT); $stat[7] =~ s/[^\d]+//g; ## change boot time(UNIX timestamp) $btime = gmtime($stat[7] + (3600*9)); $term = time() - $stat[7]; $uptime = &runtime($term); print "boot time\t: $btime\n"; print "system uptime\t: $uptime\n"; sub runtime { my($term) = @_; $days = int($term / 86400); $secs = int($term % 86400); $hours = int($secs / 3600); $secs = int($secs % 3600); $mins = int($secs / 60); $secs = int($secs % 60); $days = $days ? "${days}days" : ''; $hours = $hours ? " ${hours}hours" : ''; $mins = $mins ? " ${mins}minutes " : ''; $secs .= 'seconds'; return "$days$hours$mins$secs"; } exit 0
(헙... perl은 역시 어렵군요... T.T)
(실행 결과)
# perl uptime2.pl boot time : Sat Nov 9 18:49:54 2002 system uptime : 2hours 25minutes 29seconds #
-- uptime2.php ------------------------------------------------------
<?php $stat = file('/proc/stat'); $stat[7] = preg_replace('/[^\d]+/','',$stat[7]); $btime = date('Y.m.d H:i:s',$stat[7]); $uptime = runtime(time()-$stat[7]); echo <<<_EOF_ boot time\t: $btime<BR> system uptime\t: $uptime<BR> _EOF_; function runtime($term, $lang='kr') { $l[kr] = $l[ko] = array('초','분','시간','일','달'); $l[en] = array('seconds','minutes','hours','days','mon'); $days = (int)($term / 86400); $secs = (int)($term % 86400); $hours = (int)($secs / 3600); $secs = (int)($secs % 3600); $mins = (int)($secs / 60); $secs = (int)($secs % 60); $days = $days ? $days.$l[$lang][3] : ''; $hours = $hours ? " $hours".$l[$lang][2] : ''; $mins = $mins ? " $mins".$l[$lang][1].' ' : ''; $secs .= $l[$lang][0]; return "$days$hours$mins$secs"; } ?>
[방법5] 그 외에 부팅시 생성/갱신되는 로그 파일의 확인
# ls -l --full-time /var/log/dmesg -rw-r--r-- 1 root root 6867 Sat Nov 09 18:50:17 2002 /var/log/dmesg #
EOF
관련링크
댓글목록
등록된 댓글이 없습니다.