항상 최신 항목만 유지하는 파일에 vmstat 출력을 삽입하는 방법

항상 최신 항목만 유지하는 파일에 vmstat 출력을 삽입하는 방법

10초마다 vmstat 출력을 파일에 삽입하고 싶습니다. 이 작업을 수행하려면 다음 명령을 사용합니다.

vmstat 10 > vmstatfile.txt

그러면 vmstatfile.txt라는 파일이 생성되고 10초마다 추가됩니다. 내가 원하는 것은 파일이 커지지 않도록 내 파일에 항상 vmstat 항목(최신 항목)이 포함되어야 한다는 것입니다. 가능합니까? 어떻게 해야 하나요?

답변1

인수 없이 vmstat단일 보고서가 인쇄되므로 간단한 쉘 루프에서 느리게 실행할 수 있습니다.

while true; do 
    vmstat > vmstatfile.txt
    sleep 10
done

그러나 첫 번째 보고서는 시작 이후의 평균이므로 파일에 가장 최근 기간의 보고서가 포함되도록 하려면 최소 2개의 보고서를 요청해야 합니다. 실행될 때마다 인쇄되는 첫 번째 보고서를 제거하려면 삭제(세 번째 줄 제거)를 사용하면 됩니다 sed. 여기서는 임시 파일을 사용해야 하므로 실제 대상 파일에는 언제든지 부분 출력이 포함되지 않습니다.

while true; do 
    vmstat 10 2 | sed -e 3d > vmstatfile.tmp
    mv vmstatfile.tmp vmstatfile.txt
done

답변2

vmstat이것은 ilkkachu가 제안한 대로 10초마다 세 개의 외부 명령을 시작하는 대신 하나의 외부 명령만 영원히 실행하고( ) 추가 명령을 사용하지 않는 가장 간단한 방법입니다 .

vmstat 10 | while read line; do
    echo "$line" > vmstat.out
done

처음 10초 동안 vmstat.out파일에는 마지막 재부팅 이후의 평균이 포함됩니다. 그 후에는 정확히 요청된 최신 통계가 표시됩니다.

내 파일은 항상 하나의 vmstat항목(최신 항목)을 포함해야 파일이 커지지 않습니다.

관련 정보