리눅스 업타임
리눅스 서버의 업타임을 확인할 때 기본적으로는
$ uptime (-p)
하면 서버가 부팅된 후 유지된 시간을 쉘에 출력한다.
나는 Python으로 이를 확인해야 했기에, subprocss
모듈을 사용하여 저 명령어를 쉘에 직접 입력해서 결과를 얻으려고 했었는데, 구글링하다가 더 쉬운 방법을 찾아냈다.
from datetime import timedelta
def get_uptime():
with open("/proc/uptime", 'r') as f:
uptime_seconds = float(f.readline().split()[0])
t = timedelta(seconds = uptime_seconds)
return (t.days, t.seconds // 3600, (t.seconds // 60) % 60)
바로 /proc/uptime
의 첫 번째 값을 확인하는 것인데, proc manpage에서는 다음과 같이 설명한다:
$ man proc
...text
/proc/uptime
This file contains two numbers: the uptime of the system (seconds),
and the amount of time spent in idle process (seconds).
...
그러면 이 업타임은 정확히 어떻게 측정되는 것일까? 이 글과 확인해본 리눅스 커널 코드에 의하면, fs/proc/uptime.c에서 찾을 수 있는
proc_create("uptime", 0, NULL, &uptime_proc_fops);
가 proc 파일시스템에서 uptime
을 갱신하는데, 아직 확인해보지는 않았지만 결국 kernel/time/timekeeping.c가 계산한다고 한다.
결론적으로는 uptime
의 카운팅은 커널이 초기화된 직후 시작된다. 이 값은 리눅스 커널에서 계산할 수 있는 가장 정확하고 낮은 레벨의 업타임인 셈이다.
Leave a comment