저는 "uptime"을 사용하여 5분마다 로드 평균을 확인하고 결과를 텍스트 파일에 기록하는 간단한 bash 스크립트를 작성했습니다. 한 가지를 제외하면 모든 것이 괜찮습니다. 매일 12:00부터 13:00까지 일반 정수 값 대신 "평균"이라는 텍스트 값이 표시됩니다.
"uptime" 명령의 "평균" 결과를 어떻게 해석해야 합니까? 명령줄에서 "uptime"을 실행하면 모든 것이 잘 작동합니다. 일반 정수 값이 표시됩니다.
소스 코드는 다음과 같습니다.
#!/bin/bash
sCurrentUptime="$(uptime | awk '{print $10}')"
iLength="${#sCurrentUptime}"
sUptime="${sCurrentUptime:0:iLength-1}"
iUptime=${sUptime/.*}
now="$(date)"
echo $now';'$iUptime
출력은 다음과 같습니다(마지막 열에는 로드 평균이 포함되어 있음).
Thu Apr 17 08:40:01 MSK 2014;0
Thu Apr 17 09:00:01 MSK 2014;2
Thu Apr 17 09:20:02 MSK 2014;3
Thu Apr 17 09:40:02 MSK 2014;3
Thu Apr 17 10:00:01 MSK 2014;2
Thu Apr 17 10:20:01 MSK 2014;3
Thu Apr 17 10:40:01 MSK 2014;1
Thu Apr 17 11:00:02 MSK 2014;2
Thu Apr 17 11:20:01 MSK 2014;3
Thu Apr 17 11:40:01 MSK 2014;2
Thu Apr 17 12:00:02 MSK 2014;3
Thu Apr 17 12:20:02 MSK 2014;average
Thu Apr 17 12:40:01 MSK 2014;average
Thu Apr 17 13:00:01 MSK 2014;average
Thu Apr 17 13:20:01 MSK 2014;3
Thu Apr 17 13:40:01 MSK 2014;1
Thu Apr 17 14:00:01 MSK 2014;2
Thu Apr 17 14:20:01 MSK 2014;3
Thu Apr 17 14:40:01 MSK 2014;2
Thu Apr 17 15:00:01 MSK 2014;2
Thu Apr 17 15:20:01 MSK 2014;3
Thu Apr 17 15:40:01 MSK 2014;1
답변1
가동 시간의 출력은 가동 시간 자체에 따라 달라집니다.
시스템에
$ uptime
17:35pm up 5 days 9:24, 9 users, load average: 0.30, 0.28, 0.28
따라서 12개의 필드가 있습니다.
다른 시스템에서
uptime
17:36:15 up 8:44, 2 users, load average: 0.09, 0.30, 0.41
그래서 10개의 필드가 있습니다. 물론, 시스템에 따라 지연될 수도 있습니다. 나는 당신이 정오에 컴퓨터를 켰다고 가정합니다. 그 결과 가동 시간은 N일 0시간이 되고, 이는 표시되지 않습니다(또는 이와 유사한 것).
어쨌든 마지막 열을 원하는 것 같으므로 awk
명령을 다음으로 바꿀 수 있습니다.
uptime | awk '{print $NF}'
NF
필드 수이므로 $NF
행의 마지막 필드입니다. 이것이 오류 방지에 더 적합하다고 생각합니다.
첫 번째 로드 평균을 원하지만 세 번째 로드 평균은 원하지 않는 경우 다음을 수행할 수 있습니다.
uptime | awk '{print $(NF-2)}'
답변2
스크립팅 목적으로는 불쾌한 출력을 /proc/loadavg
구문 분석하기 위해 로드 평균을 얻는 것이 더 쉽다는 것을 알았습니다 .uptime
예
$ cat /proc/loadavg
1.08 0.77 0.85 2/838 16771
에서 man proc
:
/proc/loadavg
The first three fields in this file are load average figures
giving the number of jobs in the run queue (state R) or waiting for
disk I/O (state D) averaged over 1, 5, and 15 minutes. They are
the same as the load average numbers given by uptime(1) and other
programs. The fourth field consists of two numbers separated by a
slash (/). The first of these is the number of currently runnable
kernel scheduling entities (processes, threads).
The value after the slash is the number of kernel scheduling
entities that currently exist on the system. The fifth field is
the PID of the process that was most recently created on the system.