다음과 같은 줄을 포함하는 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/'