Написал скрипт проверки структуры БД и если БД корректная, тогда выполняется rsync на удаленную машину
#!/bin/bash
Код | source="/var/db/segment/sv-abonents/" target="/mnt/active/sov/sv-abonents/" remote="10.10.11.30" LOG="/var/log/db.log" FILE_LIST=( $(find $target -type f -name "*.db") ) for ((i=0; i<${#FILE_LIST[*]}; i++)) do mod[$i]=$(stat -c%y ${FILE_LIST[$i]}) done while true do rsync -rugo $source $target #CHeck $remote ssh $remote ls -l $target &>/dev/null case "$?" in 0) for ((m=0; m<${#FILE_LIST[*]}; m++)) do count=0 newmod=$(stat -c%y ${FILE_LIST[$m]}) if ! ssh $remote ls ${FILE_LIST[$m]} &>/dev/null || [[ "${mod[$m]}" != "$newmod" ]] ;then #Здесь зависает скрипт #Database check db_verify ${FILE_LIST[$m]} &>/dev/null statuserror=$? while [[ $statuserror != 0 ]] do echo $(date)" Файл базы данных ${FILE_LIST[$m]} поврежден. Перепроверяю!!!" >> $LOG #Replication repeat rsync -rugo $source $target >> $LOG #Verifycation repeat db_verify ${FILE_LIST[$m]} &>/dev/null statuserror=$? #if the database check was conducted 10 times stop check (( count++ )) if [[ $count == 10 ]] ;then echo $(date)" Файл БД абонентов ${FILE_LIST[$m]} не корректный!!!" >> $LOG break fi sleep 2 done if [[ $count < 10 ]] ;then rsync -ugo ${FILE_LIST[$m]} $remote:$target echo $(date)" rsync ${FILE_LIST[$m]} -> $remote:$target" >> $LOG fi fi mod[$m]=$newmod done ;; 2) echo $(date)" Directory $target on the $remote is not available" >> $LOG ;; 255) echo $(date)" $remote is not available" >> $LOG esac sleep 2 done
|
Так вот скрипт зависает при проверке наличия файла на удаленном машине
Код | if ! ssh $remote ls ${FILE_LIST[$m]} &>/dev/null || [[ "${mod[$m]}" != "$newmod" ]] ;then
|
ssh настроил, чтобы выполнять команды на удаленной машине. Почему зависает скрипт? Есть идеи? |