次の3つのコマンド(それぞれにxargsと並列プロセスが含まれています)があり、それらをまとめて並列に実行したいと思います。
1. ls filenames_for_bld*_all | xargs -i bash -c 'calculateMd5Sums "$@"' _ {}
2. cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 10 -I {} remotecmd -q -n server1 md5sum {} 2>/dev/null| tee -a ${dir}/md5sums_for_server1
3. cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 23 -I {} remotecmd -q -n server2 md5sum {} 2>/dev/null | tee -a ${dir}/md5sums_for_server2
各xargsコマンドは、別々のサーバーで複数のプロセスを実行します。したがって、1つはサーバー1〜5で実行され、2つはサーバー6で実行され、3つはサーバー7で実行されます。
上記の3つすべてを並行して実行することは可能ですか?
上記でxargsを使用すると便利です。上記の3つを改行で区切った文字列xargsInputに設定することを考えていました...
echo $xargsInput | xargs -n 1 -P 3 -I {} sh -c {}
ただし、これにはいくつかのエラーがあります。
ls: xargs: No such file or directory
ls: bash: No such file or directory
ls: calculateMd5Sums: No such file or directory
ls: 20140107: No such file or directory
ls: _: No such file or directory
ls: {}: No such file or directory
&
各行の後にaを追加し、オプションwait
で最後にaを追加して、すべてが完了するのを待ちます。
ls filenames_for_bld*_all | xargs -i bash -c 'calculateMd5Sums "$@"' _ {} &
cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 10 -I {} remotecmd -q -n server1 md5sum {} 2>/dev/null| tee -a ${dir}/md5sums_for_server1 &
cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 23 -I {} remotecmd -q -n server2 md5sum {} 2>/dev/null | tee -a ${dir}/md5sums_for_server2 &
wait
これは、相互作用する必要のないすべての個別のシェルコマンドで機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加