我想dsh(分布式外壳)将是一个不错的选择,但是当我在节点上运行 shell 脚本时,我没有得到预期的输出,
dsh -aM -c bash /home/cloudera/bash_script.sh
[email protected]: files in folder
[email protected]: server2
[email protected]: server1
[email protected]: sleep time................
[email protected]: server3
[email protected]: sleep time................
[email protected]: sleep time................
bash_script.sh
#!/bin/bash
while true;
do
shopt -s nullglob
#shopt -s dotglob # To include hidden files
files=(/home/cloudera/MyFolder/*)
echo "files in folder" $files[@]
if [ ${#files[@]} -gt 0 ];
then
for entry in "/home/cloudera/abc"/*
do
cp $entry /home/cloudera/Backup
var=`basename $entry`
var1=`echo ${var//[.csv]/}`
echo $var1
gawk -f abc.awk $entry
rm -r -f $entry
done
fi
echo "server2"
sleep 5s
echo "sleep time................"
sleep 10s
done
如果我在没有 dsh 的情况下运行我的脚本,它可以正常工作;为什么会出现这种异常行为?默认情况下,dsh 最多可以并行运行 64 个命令。 dsh 支持所有 bash 命令吗?跨节点并行处理 shell 脚本的最佳选择是什么?
答案1
在开始移植之前尝试使用 GNU Parallel:
parallel -j0 --tag --line-buffer ssh {} bash /home/cloudera/bash_script.sh ::: server1 server2 server3
--line-buffer 需要版本 20130822 或更高版本。