각본가가 아닙니다. 명령을 실행하는 데 걸리는 시간을 확인하고, 성공했는지 표시하고, 타임스탬프를 추가하고, 모든 것을 로그 파일에 추가하기 위해 반복 테스트를 작성하려고 합니다.
아, 이것은 Mac의 bash에 있습니다.
"실제"를 분석하고 분석하기 위해 다음을 시도했습니다.
time ./login.sh | sed -n 's/.*real://p' >> output.txt
또는
(time ./login.sh) 1> /dev/null 2> output.txt
login.sh 스크립트는 "성공" 또는 "실패"가 추가된 상태로 실행됩니다.
application login -u "user" -p '******' "host.domain.com" | grep "Succeeded" &> /dev/null
if [ $? == 0 ]; then
echo " Suceeded" >> output.txt
else
echo " Failed" >> output.txt
fi
이 모든 것을 sleep 명령과 함께 For 루프에 넣어 5분마다 발생하도록 하겠습니다.
for n in {1..1000};
do
# Command that Adds the time stamp
# the command to find the real time above once I get it working
sleep 5m
done
원하는 출력은 다음과 유사합니다.
Sun Jul 29 16:15:06 PDT 2019 real 0m0.815s Suceeded
Sun Jul 29 16:20:06 PDT 2019 real 0m0.635s Suceeded
Sun Jul 29 16:25:06 PDT 2019 real 0m1.053s Suceeded
Sun Jul 29 16:30:06 PDT 2019 real 0m15.653s Failed
답변1
/usr/bin/time
쉘 내장 대신 사용하십시오 time
. 그런 다음 명령을 stderr
별도의 파일에 캡처하십시오. 경과된 실시간은 출력의 첫 번째 단어이므로 사용하기 쉽습니다.stdout
application
time
awk
grep
스위치 가 있으므로 -q
로 리디렉션할 필요가 없습니다 /dev/null
.
마지막으로 몇 초 안에 매개변수를 허용하므로 이것이 원하는 대로 작동하지 sleep
않을 것 같습니다 . sleep 5m
하지만 구문은 허용되므로 그대로 두겠습니다.
for n in {1..1000}
do
/usr/bin/time application login -u "user" \
-p '******' "host.domain.com" > login.out 2>time.out
realtime=$(awk '{print $1}' time.out)
echo -n "$(date) real $realtime " >> output.txt
if grep -q "Succeeded" login.out; then
echo "Succeeded" >> output.txt
else
echo "Failed" >> output.txt
fi
sleep 5m
done
답변2
grep/awk/sed를 사용하지 말고 시간에 대한 형식 옵션을 사용하세요. 예를 들어 time -f "%e" command
명령에 걸린 실제 시간(초)만 출력하고 그 이상은 출력하지 않습니다.