SEQuence 진행 상황 모니터링

SEQuence 진행 상황 모니터링

3일 넘게 실행된 다음 스크립트가 있습니다.

seq -w 1 1000000 | while read i; do (./myscript.pl $i >> output.txt); done

시퀀스가 얼마나 진행되었는지 알 수 있나요?

답변1

요소별로 서로 다른 매개변수를 사용하여 명령을 호출하므로 해당 명령이 현재 어떤 매개변수를 처리하고 있는지 확인하세요.

ps w -C myscript.pl

write프로세스가 수행하는 시스템 호출 수를 확인하여 대략적인 값을 얻을 수 있습니다 seq. pgrep seq(또는 다른 명령, 예를 들어 ps uw -C seq여러 프로세스가 있고 seq원하는 프로세스를 식별해야 하는 경우) 을 사용하여 프로세스 ID를 찾으십시오. PID가 1234이면

grep syscw /proc/1234/io

프로세스의 일부 IO 통계를 읽으십시오./proc1. 이 값에 1²를 더하고 getconf PIPE_BUF /4096을 곱하여 쓴 바이트 수를 얻습니다 seq. 지금까지 쓴 모든 숫자의 총 길이입니다. 동일한 너비의 줄을 인쇄하려고 하므로 8로 나누어 지금까지 쓰여진 숫자 수를 구합니다.

얼마나 멀리 이동했는지 확인하는 seq더 편리한 방법 은 다음과 같습니다.시스템 호출 추적strace. Ubuntu에서는 이 작업을 수행하려면 기본적으로 루트가 필요합니다.

$ strace -p1234
strace: Process 1234 attached
write(1, "0008193\n0008194\n0008195\n0008196\n"..., 4096^Cstrace: Process 1234 detached

위의 예에서 seq읽기 측에서 8192 처리를 완료하고 더 많은 데이터를 처리할 준비가 되면 8193이 파이프에 기록될 다음 숫자입니다.

1 일반 파일이 기록되는 경우 또는 은 파일의 오프셋, 즉 기록된 바이트 수를 표시 합니다 . 하지만 파이프를 사용하면 이 정보를 얻을 수 없습니다.seqcat /proc/1234/1/fdinfolsof -p1234seq
²실험을 통해 결정되었습니다 . 왜 첫 번째 쓰기 작업이 두 번 기록되는지 모르겠습니다 PIPE_BUF.

답변2

귀하의 스크립트가 무엇을 하는지는 모르겠지만, watch cat output.txt다른 터미널에서 출력 파일이 어떻게 보이는지 모니터링할 수 있습니까?

또는 (이것이 귀하가 요청한 것이 아니라는 것을 알고 있습니다) 다음과 같이 명령을 실행할 수도 있습니다.

seq -w 1 1000000 | while read i; do (./myscript.pl $i >> output.txt & echo i); done

또는

seq -w 1 1000000 | while read i; do (./myscript.pl $i tee -a output.txt); done

답변3

사용pv파이프 뷰 유틸리티:

seq -w 1 1000000 | pv -lcs 1M | 
while read i; do (./myscript.pl $i >> output.txt); done

...다음으로 출력됩니다.표준 오류 오류율읽은 행 수와 완료된 행의 현재 비율을 표시하는 지속적으로 업데이트되는 진행률 표시줄입니다.

관련 정보