#! /bin/bash
sshcmd()
{
#从第一个参数中获得要执行的命令
myssh_cmd="$1"
sleeptime=0
#通过这个脚本执行命令
sh ${CUR_DIR}/sshcmd.sh -c "$myssh_cmd" -m "$IP" -u "$loginuser" -p "$loginpassword"
#上面的命令执行失败后$? 会返回非0,因此这个if条件回城里
if [ $? -ne 0 ]; then
while true
do
#c5 表示ping 这个ip地址五次
if ping -c5 "$IP" &> /dev/null; then
break
fi
#如果sleeptime 一空大于等于180次,则退出
if [ $sleeptime -ge 180 ]; then
echo "ERROR: ping $IP Failed"
break
fi
#睡眠60s
sleep 60
#睡眠总的时间
((sleeptime = sleeptime + 60))
done#通过ping 主机和sleep 来等待主机反应
#由于前一次执行下面的命令failed了,通过前面的ping和sleep后,这里再次执行
sh ${CUR_DIR}/sshcmd.sh -c "$myssh_cmd" -m "$IP" -u "$loginuser" -p "$loginpassword"
if [ $? -ne 0 ]; then
#如果还是失败的话,则退出
echo " Failed in sshscp.sh, maybe there is no enough space on $IP"
exit 1
fi
fi
}
sshscp()
{
MYSOURCE="$1"
MYDESTDIR="$2"
isdir="$3"
tofrom="$4"
sleeptime=0
scpcmd=
#根据isdir的值是is还是no ,已经tofrom 等于to还是from 分四种case开生成要执行命令的字符串
if [ "$isdir" = "is" ]; then
if [ $tofrom = "to" ]; then
scpcmd="sh ${CUR_DIR}/sshscp.sh -s $MYSOURCE -d $loginuser@$IP:$MYDESTDIR -p $loginpassword -r "
elif [ $tofrom = "from" ]; then
scpcmd="sh ${CUR_DIR}/sshscp.sh -s $loginuser@$IP:$MYSOURCE -d $MYDESTDIR -p $loginpassword -r "
else
echo "wrong tofrom parameter"
exit 1
fi
elif [ "$isdir" = "no" ]; then
if [ $tofrom = "to" ]; then
scpcmd="sh ${CUR_DIR}/sshscp.sh -s $MYSOURCE -d $loginuser@$IP:$MYDESTDIR -p $loginpassword "
elif [ $tofrom = "from" ]; then
scpcmd="sh ${CUR_DIR}/sshscp.sh -s $loginuser@$IP:$MYSOURCE -d $MYDESTDIR -p $loginpassword "
else
echo "wrong tofrom parameter"
exit 1
fi
else
echo "wrong isdir parameter"
exit 1
fi
echo "$scpcmd"
#这里通过eval 来执行保存在字符串中的命令
eval $scpcmd
if [ $? -ne 0 ]; then
#如果执行失败,则先ping 主机,看主机是否有反应,最多ping 5次,如果主机没有反应,则sleep 60s。然后再ping主机,由于sleep 最多sleep 180s
#因此最多也就ping 3次,如果主机还没有反应的话,就退出了。
#如果主机有反应了,则继续执行命令.
while true
do
if ping -c5 "$IP" &> /dev/null; then
break
fi
if [ $sleeptime -ge 180 ]; then
echo "ERROR: ping $IP Failed"
break
fi
sleep 60
((sleeptime = sleeptime + 60))
done
eval $scpcmd
if [ $? -ne 0 ]; then
echo " Failed in sshscp.sh, maybe there is no enough space on $IP"
exit 1
fi
fi
}
utils/function_cmd_scp.sh
最新推荐文章于 2024-02-04 21:37:27 发布