Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: bash while проверка до копирования.  (Прочитано 1050 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Puggy

  • Автор темы
  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
bash while проверка до копирования.
« : 13 Февраля 2014, 10:39:42 »
общая цель: копировать файлы при наличии сетевого диска, если диск отсутствует sleep на 30 min произвести копирование, в случае прецедента снова sleep 30 min, и повторить, после 2х неудачных запусков отправить почту.
#!/bin/bash
storage=/mnt/nfs_disk
exptemp=/opt/local
file=/mnt/nfs_disk/remotefile
logexp=/var/log/backup.log

function copyfile {
echo "`date +%H:%M:%S` start copy db dump's from $exptemp to $storage" >> $logexp
cp $exptemp/* $storage && rm -rf $exptemp/*.dmp
echo "`date +%H:%M:%S` finish copy db dump's from $exptemp to $storage done!" >> $logexp
}

if [[ -e $file ]]; then
copyfile
mail -s "send mail copy done!.."
else
sleep 1800
????copyfile
sleep 1800
????copyfile
#elsif
mail -s "send mail copy cancel!.."
fi
Т.к в знаниях большой пробел в голову приходит такая схема: если файл на сетевом диске доступен запустить функцию и произвести копирование. Иначе запустить повторно copyfile через 30 мин. Но в этом случае при успешном выполнении будет еще один запуск через 30 мин, а мне этого не надо, т.е надо писать цикл с условием. Как это сделать нет понимания. Прошу просветить.

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: bash while проверка до копирования.
« Ответ #1 : 13 Февраля 2014, 16:45:50 »
Код: (bash) [Выделить]
...

sleeptime=1800;
num=2;

function copyfile {
    echo "попытка копирования..."
    cp $exptemp/* $storage;
    if [ $? -eq 0 ]; then
        echo "файлы скопированы"
        rm -rf $exptemp/*.dmp;
        return 0;
    fi
    echo "файлы не скопированы"
    return 1;
}

while [ $num -gt 0 ]; do
    copyfile;
    if [ $? -eq 0 ]; then
        mail -s "send mail copy done!.."
        exit 0;
    fi
    sleep $sleeptime
    let num=$num-1
done
exit 1;

Проверка наличия файла не производится, а сразу идёт попытка копирования. Если копирование прошло успешно, то выполнение скрипта завершается. Конечно, можно было бы и не использовать функцию, но оставил её для примера использования.

Оффлайн Puggy

  • Автор темы
  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
Re: bash while проверка до копирования.
« Ответ #2 : 14 Февраля 2014, 10:03:58 »
unimix благодарю!

 

Страница сгенерирована за 0.056 секунд. Запросов: 25.