次の行を含む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/'