명령을 실행하기 전에 명령의 출력을 인쇄하는 데 걸리는 시간

명령을 실행하기 전에 명령의 출력을 인쇄하는 데 걸리는 시간

다음과 같은 줄을 포함하는 bash 스크립트가 있습니다.

/usr/bin/time rsync -av user@host:/some/remote/path/ /some/nfs/path/

때로는 출력이 다음과 같이 표시됩니다.

0.03user 0.02system 0:00.21elapsed 26%CPU (0avgtext+0avgdata 4652maxresident)k
0inputs+152outputs (0major+2334minor)pagefaults 0swaps
receiving incremental file list
2019-07-17/
2019-08-01/
2019-08-01/12:17.csv
sent 416 bytes  received 281706 bytes  564244.00 bytes/sec
total size is 820553959  speedup is 2908.51

즉, 시간이 지남에 따라 출력이앞으로rsync의 출력! 말할 필요도 없이, 이는 로그 해석을 더욱 짜증나게 만듭니다.

스크립트가 모든 출력을 상단 근처의 로그 파일에 기록한다는 점을 추가해야 합니다.

exec >>$LOG_FILE 2>&1

따라서 시간과 rsync의 경우 표준 출력과 표준 오류는 동일한 파일 설명자, 즉 디스크 파일에 대한 핸들입니다.

또한 bash의 내장 스크립트를 사용하여 이 스크립트를 시도했는데 time동일한 동작을 본 것 같습니다.

어떻게 이런일이 일어 났습니까? stderr 및 stdout 버퍼링과 관련이 있습니까? 상위 프로세스보다 오래 지속되는 하위 프로세스를 분기하는 rsync와 관련이 있습니까?

또한 이런 일이 발생하지 않도록 하려면 어떻게 해야 합니까?

답변1

이 시도:

/usr/bin/time sh -c 'rsync -av user@host:/some/remote/path/ /some/nfs/path/'

관련 정보