Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование *NIX систем > Зависает скрипт


Автор: NZero 24.11.2016, 15:02
Написал скрипт проверки структуры БД и если БД корректная, тогда выполняется 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 настроил, чтобы выполнять команды на удаленной машине.
Почему зависает скрипт? Есть идеи?

Автор: Bulat 29.11.2016, 16:45
Цитата(NZero @  24.11.2016,  15:02 Найти цитируемый пост)
Почему зависает скрипт? Есть идеи? 


В смысле зависает? А логи и т.п. что-то есть? Что говорит strace?

Автор: Lonley 18.8.2017, 17:24
ssh команду с рук запусти эту и посмотри как отработает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)