【莫名其妙的退出】继续未完成的shell循环调用shell(一)

继续未完成的shell,用处是同步文件。
一层主机读取服务器列表,然后分发到二层相应服务器;
在由第二层读取服务器列表分发到第三层。

具体脚本如下:


#! /bin/sh
USER="root"
MODEL="root"

SRC="192.168.1.53"
SRCDIR=/home/root_rsync/
DSTDIR=""

DSTSH=$SRCDIR"s1.sh"
SERVER_LIST=$SRCDIR"server_list.txt"
BACKDIR=backfiles/
SECRET=$SRCDIR"se.pwd"
FLAG=""

# mysql information
HOST=-h192.168.1.53
USERNAME=-uroot
PASSWORD=-p123456


##
# Whether the parameters is exist
#
# $1 argc
#
function check_argc {
argcc=$1
if [ $argcc ]
then
echo "The file name is:$argcc"
else
echo "argc one is null"
exit 1
fi
}

##
# Read list of the terminal servers
#
# $1 The dir of MP4 and the filename, But no suffix
#
function read_line {

file_name=$1
check_argc $file_name

srcdir=$SRCSIR$file_name

# compute the directory structure with file name

declare -i num4=0
declare -i num3=0
declare -i num2=0
declare -i num1=0
declare -i numInfo=$1

num4=numInfo/16777216%256
num3=numInfo/65536%256
num2=numInfo/256%256

filePath=$num4"/"$num3"/"$num2"/"$file_name".mp4"

echo "11111111111111111111111111111111111111111111"
echo "22222222222222222222222222222222222222222222"
while read line
do
dst=$line

# write rsync_log to mysql begin
insert_sql $dst $filePath
# write rsync_log to mysql end

check_network $dst
if [ $? -ne 0 ]
then
echo .
echo "!!!!!! ping $DST Host Connection Failed!"
echo .
update_sql 9 $dst $filePath
echo ......
echo ......
echo ......
else
run_rsync $num4"/"$num3"/"$num2"/" $file_name $dst

# if run_rsync begin
if [ $? -ne 0 ]
then
echo .
echo "!!!!!! Send files failure!"
echo .
update_sql -1 $dst $filePath
echo ......
echo ......
echo ......
else
update_sql 1 $dst $filePath
send_terminal $dst $num4"/"$num3"/"$num2"/" $file_name

if [ $? -ne 0 ]
then
echo .
echo "!!!!!! Send files to other terminal failed!"
echo .
fi
echo ......
echo ......
echo ......
fi
# if run_rsync end
fi

done < $SERVER_LIST
}

##
# Check the network
#
# $1 dstIp
#
function check_network {
echo "######## Check the network situation***"
DST=$1
ping $DST -c 2

# if [ $? -ne 0 ]
# then
# echo .
# echo "!!!!!! ping $DST Host Connection Failed!"
# echo .
# exit 1
# fi
}

##
# Run the rsync, Send the MP4 to the terminal
#
# $1 directory
# $2 filename without suffix
# $3 dstIp
#
function run_rsync {

srcdir=$1
filename=$2
dstip=$3

echo "######## Start to send the files, the time is:"
echo "######## "`date -d today +"%Y-%m-%d %T"`

mkdir -p $BACKDIR$srcdir
cp $filename".mp4" $BACKDIR$srcdir
rsync -avzR --password-file=$SECRET $BACKDIR$srcdir$filename".mp4" $USER@$dstip::$MODEL"/"

#currentDate=`date -d today +"%Y-%m-%d %T"`
#filePath=$srcdir$filename".mp4"
# if [ $? -ne 0 ]
# then
# echo .

#echo "###### update send info fails begin"
#echo "UPDATE rsync_transport_log SET STATE_END_DATE='$currentDate', STATE='-1' WHERE FILE_PATH='$filePath'"
#mysql -uroot -p123456 << EOF
#use cdn
#UPDATE rsync_transport_log SET STATE_END_DATE='$currentDate', STATE='-1' WHERE FILE_PATH='$filePath';
#exit
#EOF
#echo "###### update send info fails end"
# echo "!!!!!! Send files failure!"
# echo .
# exit 1
# else
#echo "###### update send info success begin"
#echo "UPDATE rsync_transport_log SET STATE_END_DATE='$currentDate', STATE='1' WHERE FILE_PATH='$filePath'"
#mysql -uroot -p123456 << EOF
#use cdn
#UPDATE rsync_transport_log SET STATE_END_DATE='$currentDate', STATE='1' WHERE FILE_PATH='$filePath';
#exit
#EOF
#echo "###### update send info seccess end"


# fi
echo .
echo "######## Send files finish:"
echo "######## "`date -d today +"%Y-%m-%d %T"`
echo .

}

##
# send the files to terminal
#
# $1 Remote host IP
# $2 file position on remote
# $3 file name
#
function send_terminal {
dst=$1
dir=$2
filename=$3

echo "######## Begin to send the files to other terminal:"
echo "######## "`date -d today +"%Y-%m-%d %T"`
ssh $USER@$dst $DSTSH $dir$filename &
echo "######## Send files to terminal finish:"
echo "######## "`date -d today +"%Y-%m-%d %T"`
echo .
}

##
# put the information into the mysql
#
# $1 remote ip
# $2 filePath + fileName, eg:0/0/0/0.mp4
#
function insert_sql {
dst=$1
filePath=$2
currentDate=`date -d today +"%Y-%m-%d %T"`

echo "DELETE FROM rsync_transport_log WHERE FILE_PATH = '$filePath' AND SERVER_IP = '$dst'"
echo "INSERT INTO rsync_transport_log(SERVER_IP, PARENT_IP, FILE_PATH, STATE, STATE_START_DATE) VALUES('$dst', '$SRC', '$filePath', '0', '$currentDate')"

mysql -uroot -p123456 << EOF
use cdn
DELETE FROM rsync_transport_log WHERE FILE_PATH = '$filePath' AND SERVER_IP = '$dst';
INSERT INTO rsync_transport_log(SERVER_IP, PARENT_IP, FILE_PATH, STATE, STATE_START_DATE) VALUES('$dst', '$SRC', '$filePath', '0', NOW());
exit
EOF

}

##
# update the information
#
# $1 STATE
# $2 remote ip
# $3 filePath + fileName, eg:0/0/0/0.mp4
#
function update_sql {
state=$1
dst=$2
filePath=$3
currentDate=`date -d today +"%Y-%m-%d %T"`

echo "UPDATE rsync_transport_log SET STATE_END_DATE='$currentDate', STATE='$state' WHERE SERVER_IP='$dst' AND FILE_PATH='$filePath'"

mysql -uroot -p123456 << EOF
use cdn
UPDATE rsync_transport_log SET STATE_END_DATE=NOW(), STATE='$state' WHERE SERVER_IP='$dst' AND FILE_PATH='$filePath';
exit
EOF

}

read_line $1



服务器列表为txt文件,内容如下:

111.11.1.1
192.168.1.51
192.168.1.52
222.22.2.2



第二层服务器的脚本如下:



#! /bin/sh
USER="root"
MODEL="root"

SRC="192.168.1.52"
SRCDIR=/home/root_rsync/
DSTDIR=""

SERVER_LIST=$SRCDIR"server_list.txt"
BACKDIR=backfiles/
SECRET=$SRCDIR"se.pwd"

# mysql information
HOST=-h192.168.1.53
USERNAME=-uroot
PASSWORD=-p123456

##
# Whether the parameters is exist
#
# $1 argc
#
function check_argc {
argcc=$1
if [ $argcc ]
then
echo "The file name is:$argcc"
else
echo "argc one is null"
exit 1
fi
}

##
# Read list of the terminal servers
#
# $1 The dir of MP4 and the filename, But no suffix
#
function read_line {

check_argc $1
filePath=$1".mp4"

while read line
do
dst=$line


# write rsync_log to mysql begin
insert_sql $dst $filePath
# write rsync_log to mysql end

check_network $dst
if [ $? -ne 0 ]
then
echo .
echo "!!!!!! ping $DST Host Connection Failed!"
echo .
update_sql 9 $dst $filePath
echo ......
echo ......
echo ......

else
run_rsync $1 $dst

# if run_rsync begin
if [ $? -ne 0 ]
then
echo .
echo "!!!!!! Send files failure!"
echo .
update_sql -1 $dst $filePath
echo ......
echo ......
echo ......
else
update_sql 1 $dst $filePath
echo ......
echo ......
echo ......
fi
# if run_rsync end
fi

done < $SERVER_LIST
}


##
# Check the network
#
# $1 dstIp
#
function check_network {
echo "######## Check the network situation***"
dst=$1

ping $dst -c 2
# if [ $? -ne 0 ]
# then
# echo .
# echo "!!!!!! ping $DST Host Connection Failed!"
# echo .
# exit 1
# fi
}

##
# Run the rsync, Send the MP4 to the terminal
#
# $1 dir + filename but no suffix
# $2 dstIp
#
function run_rsync {

srcdir=$1
dstip=$2

echo "######## Start to send the files, the time is: "
echo "######## "`date -d today +"%Y-%m-%d %T"`
echo rsync -avzR --password-file=$SECRET $BACKDIR$srcdir".mp4" $USER@$dstip::$MODEL"/"
rsync -avzR --password-file=$SECRET $BACKDIR$srcdir".mp4" $USER@$dstip::$MODEL"/"

# if [ $? -ne 0 ]
# then
# echo .
# echo "!!!!!! Send files failure!"
# echo .
# exit 1
# fi
echo .
echo "######## Send files finish: "
echo "######## "`date -d today +"%Y-%m-%d %T"`
echo .
}

##
# put the information into the mysql
#
# $1 remote ip
# $2 filePath + fileName, eg:0/0/0/0.mp4
#
function insert_sql {
dst=$1
filePath=$2
currentDate=`date -d today +"%Y-%m-%d %T"`

echo "DELETE FROM rsync_transport_log WHERE FILE_PATH = '$filePath' AND SERVER_IP = '$dst'"
echo "INSERT INTO rsync_transport_log(SERVER_IP, PARENT_IP, FILE_PATH, STATE, STATE_START_DATE) VALUES('$dst', '$SRC', '$filePath', '0', '$currentDate')"

mysql $HOST $USERNAME $PASSWORD << EOF
use cdn
DELETE FROM rsync_transport_log WHERE FILE_PATH = '$filePath' AND SERVER_IP = '$dst';
INSERT INTO rsync_transport_log(SERVER_IP, PARENT_IP, FILE_PATH, STATE, STATE_START_DATE) VALUES('$dst', '$SRC', '$filePath', '0', NOW());
exit
EOF

}

##
# update the information
#
# $1 STATE
# $2 remote ip
# $3 filePath + fileName, eg:0/0/0/0.mp4
#
function update_sql {
state=$1
dst=$2
filePath=$3
currentDate=`date -d today +"%Y-%m-%d %T"`

echo "UPDATE rsync_transport_log SET STATE_END_DATE='$currentDate', STATE='$state' WHERE SERVER_IP='$dst' and FILE_PATH='$filePath'"

mysql $HOST $USERNAME $PASSWORD << EOF
use cdn
UPDATE rsync_transport_log SET STATE_END_DATE=NOW(), STATE='$state' WHERE SERVER_IP='$dst' and FILE_PATH='$filePath';
exit
EOF

}

read_line $1 >rsy.log 2>&1




第二层到第三层完全正常,第一层到第二层,只能循环前三个ip然后就over了

我将ip换了个位置,变成
192.168.1.51
192.168.1.52
XXX
XXX
这样的话,前两个可以循环到,然后shell就又退出了~~~。

这是为啥呢,初写shell,问题多多啊。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值