시간이 지남에 따라 CPU 사용량을 모니터링하기 위해 top(htop은 우리 시스템의 옵션이 아님)을 사용하는 작업이 주어졌습니다. 사용자가 1시간 이상 서버를 100% 이상 사용하는 경우 관리자에게 이메일 알림이 전송됩니다.
필요한 정보를 제공하기 위해 아래 코드를 쉽게 작성했습니다. 아래에서 코드와 결과를 볼 수 있습니다. 내가 직면하고 있는 문제는 각 프로세스에 서버 이름을 인라인으로 만드는 방법을 모른다는 것입니다. 그것으로 나머지 작업은 크게 단순화될 것입니다.
1 #!/bin/bash
2
3 echo "Script was run at $(date)" >> temp1
4
5 HOSTS=("list of server names")
6
7 for i in ${HOSTS[@]} ; do
8 echo $i >> temp1
9 ssh $i top -b -n 1 | tail -n +7 | awk '$9 >= 100.0' | awk '{print $2, $9, $12}' >> temp1
10 done
11
Currently this is what my script is returning. Only thing I want differently is to have the server name follow each individual process.
serverName1
user 187.1 MATLAB
serverName2
user 144.4 plasma-de+
user 144.4 plasma-de+
user 141.7 plasma-de+
user 138.9 mate-sett+
serverName3
user 100.0 plasma-de+
user 100.0 plasma-de+
답변1
이 시도:
ssh $i top -b -n 1 | tail -n +7 | awk '$9 >= 100.0' | awk -v "host=$i" '{print host, $2, $9, $12}' >> temp1