继续未完成的shell,用处是同步文件。
一层主机读取服务器列表,然后分发到二层相应服务器;
在由第二层读取服务器列表分发到第三层。
具体脚本如下:
服务器列表为txt文件,内容如下:
第二层服务器的脚本如下:
第二层到第三层完全正常,第一层到第二层,只能循环前三个ip然后就over了
我将ip换了个位置,变成
192.168.1.51
192.168.1.52
XXX
XXX
这样的话,前两个可以循环到,然后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,问题多多啊。