我有以下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发布于 2014-01-16 22:54:46
只需在每一行之后添加一个&,并在末尾添加一个wait以等待它们全部完成:
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这适用于不需要交互的所有单独的shell命令。
https://stackoverflow.com/questions/21174553
复制相似问题