less than 1 minute read

리눅스 서버의 업타임을 확인할 때 기본적으로는

$ 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