답변:
헤더를 인쇄하지 않는 -t
스위치를 사용할 수 있습니다 watch
. 그러나 여전히 화면을 지우므로 간단한 쉘 루프를 사용하는 것이 좋습니다.
while sleep 1; do
wc -l my.log
done
장점 중 하나는 다른 명령 (예 :)을 쉽게 추가 date
하거나 출력을 파이프하여 sed
다시 포맷 할 수 있다는 것입니다. 당신이 교체되면 그건 그렇고, sleep 1
함께 wc
루프에서 자동으로 오류에 종료됩니다.
wait
- 단지 시도하지 watch -n 1 "sleep 5"
.
watch
유용 하다고 생각 했지만 솔루션이 시계 기반 솔루션만큼 좋지는 않지만 "로그 파일이 커지는 속도" 질문에 대한 대답은 정확하지 않습니다.
watch
는 -p
가능한 경우 올바르게 수행 할 수 있는 옵션을 가지고 있습니다 (여러 개가 동시에 허용되지 않으면 1 초마다 5 초가 걸리는 명령을 수행 할 수 없습니다). 알아요, 나는 그것을 썼습니다
오래된 질문이지만 방금 매우 쉬운 대답을 찾았습니다.
watch -n1 'wc -l my.log | tee -a statistics.log'
그러면 wc
매 초마다 실행 되고 결과가 statistics.log 파일에 추가되고 화면에도 표시됩니다.
따라서 일련의 줄 수를 나타내는 숫자로 채워진 파일로 끝납니다 my.log
.
watch "($MYCMD | tee -a $MYLOG)"
아닙니다 watch "($MYCMD)" | tee -a $MYLOG
. 내가 한 것처럼 잘못하면 출력이 매우 혼란 스러울 것입니다. 여기서 명심해야 할 또 다른 사항은이 명령이 기본적으로 각 명령 실행의 타임 스탬프를 추가하지 않으므로 루프에 대한 응답이 여전히 더 효과적 일 수 있다는 것입니다.
에서 더 나은 / 로그 된 출력을 얻으려고 할 때이 질문을 보았습니다 du -sh $data_path
. 여기서 찾은 "while command, do sleep"패턴을 사용했지만 복잡한 AWK를 사용하여 원하는 출력을 제공했습니다.
while du -sh $data_path; do sleep 1; done | awk '
$1 != size {
size=$1;
path=$2;
time=systime();
seconds=time-prevtime;
if(seconds < 1000000000){
seconds=seconds" seconds"
}else{
seconds=""
}
print size, path, strftime("%m/%d/%Y@%H:%M:%S", time), seconds;
prevtime=time
}'
나는 실제로 이것을 하나의 라이너로 했으므로 세미콜론이 있습니다. 그러나 그것을 읽을 수있게하기 위해 나는 그것을 깨뜨 렸습니다. 결과는 다음과 같습니다.
502G /var/lib/cassandra/dump/ 05/22/2018@04:46:17
503G /var/lib/cassandra/dump/ 05/22/2018@04:46:59 42 seconds
504G /var/lib/cassandra/dump/ 05/22/2018@04:47:57 58 seconds
505G /var/lib/cassandra/dump/ 05/22/2018@04:48:55 58 seconds
506G /var/lib/cassandra/dump/ 05/22/2018@04:49:53 58 seconds
507G /var/lib/cassandra/dump/ 05/22/2018@04:50:50 57 seconds
508G /var/lib/cassandra/dump/ 05/22/2018@04:51:46 56 seconds
509G /var/lib/cassandra/dump/ 05/22/2018@04:52:44 58 seconds
510G /var/lib/cassandra/dump/ 05/22/2018@04:53:41 57 seconds