Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 12

Определить допустимые объемы резервного копирования

13.07.2015, 13:48. Показов 730. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Программирование на bash только приступаю изучать. Написал небольшой скрипт резервного копирования, который сначала пакует данные и делает дамп базы - а потом все это отправляет на удаленный фтп сервер.

Во-первых, хочется чтобы знающие посмотрели на код и указали слабые места. Буду очень благодарен!

Во-вторых, хочется узнать следующее: пока объем данных для копирования небольшой, чуть менее одного ГБ. Однако, в будущем увеличится до 10-15 гб. Сервер резервного копирования, со слов хостера, располагается в том же помещении что и основной сервак, поэтому каналы передачи быстрые, трафик не нагрузит. Но тем не менее: нормально ли таким скриптом копировать данные подобных объемов? Или же стоит использовать какие-то другие инструменты или алгоритмы? Скрипт, естественно, планирую пускать через планировщик, часа в 4 ночи.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash
datetime=(`date +%d-%m-%Y_%H:%M:%S`)
echo "--- Начинаю работу - $datetime ---"
#инициализация переменных
PROJECTPATH='/путь/до/проекта/на/сервере/'
NAME='имя_проекта'
DBUSER='пользователь_бд'
DBNAME='имя_бд'
DBPASS='пароль_бд'
FTPUSER='пользователь_фтп'
FTPHOST='хост_фтп'
FTPPASS='пароль_фтп'
delete='' #переменная содержит строку удаления старых резервных копий
#текущая дата, номер дня недели, номер дня месяца
date=`date +%d-%m-%Y`
date_weekdaynum=`date +%u`
date_monthdaynum=`date +%d`
#очень грубая оценка доступного места для временного размещения архива с резервной копией в локальной системе.
echo 'Начинаю приблизительную проверку доступного места.'
diskfree=(`df / | tail -n 1`)
freespace=${diskfree[3]}
duproject=(`du --total -b $PROJECTPATH`)
last=$[${#duproject[@]}-2]
projectsize=${duproject[$last]}
echo "$freespace"
if [ (("$projectsize" >= "$freespace")) ] 
then
    echo 'Места может не хватить. Работа завершена.'
    # отправить на почту сообщение - здесь пока не доделал :)
    exit
fi
echo 'Места более чем достаточно.'
#дата четыре дня назад. 
fourthdaybakup=`date +%d-%m-%Y --date=-'4 day'`
fourthdaybakup_weekdaynum=`date +%u --date=-'4 day'`
fourthdaybakup_monthdaynum=`date +%d --date=-'4 day'`
#если четыре дня назад был не первый день недели (не понедельник) и не первое число месяца - то архив на эту дату удалить.
if [ "$fourthdaybakup_weekdaynum" -ne 1 ] && [ "$fourthdaybakup_monthdaynum" -ne 01 ]
then
    echo 'Будет удален backup четырехдневной давности.'
    delete=`cat <<text
rm "/$NAME/files/$NAME.$fourthdaybakup.tar.gz"
rm "/$NAME/files/$NAME.$fourthdaybakup.sql"
text`
fi
#дата четыре недели назад
fourthweekbackup=`date +%d-%m-%Y --date=-'4 week'`
fourthweekbackup_monthdaynum=`date +%d --date=-'4 week'`
#если сегодня первый день недели (понедельник) и четыре недели назад было не первое число месяца - то архив на эту дату удалить
if [ "$date_weekdaynum" -eq 1 ] && [ "$fourthweekbackup_monthdaynum" -ne 01 ]
then 
    echo 'Будет удален backup четырехнедельной давности.'
    delete=`cat <<text
$delete
rm "/$NAME/files/$NAME.$fourthweekbackup.tar.gz"
rm "/$NAME/files/$NAME.$fourthweekbackup.sql"
text`
fi
#дата четыре месяца назад
fourthmonthbackup=`date +%d-%m-%Y --date=-'4 month'`
#если сегодня первое число, то архив четырех месячной давности удалить.
if [ "$date_monthdaynum" -eq 1 ]
then 
    echo 'Будет удален backup четырехмесячной давности.'
    delete=`cat <<text
$delete
rm "/$NAME/files/$NAME.$fourthmonthbackup.tar.gz"
rm "/$NAME/files/$NAME.$fourthmonthbackup.sql"
text`
fi
 
#создание архива и дампа базы данных, перенос на удаленный фтп сервер.
echo 'Создаю архив файлов и дамп базы данных.'
tar -zcf "/tmp/$NAME.$date.tar.gz" "$PROJECTPATH"
mysqldump -u"$DBUSER" -p"$DBPASS" "$DBNAME" > "/tmp/$NAME.$date.sql"
echo 'ФТП-сеанс: начало.'
ncftp -u"$FTPUSER" -p"$FTPPASS" "$FTPHOST" << FTP
$delete
mkdir /$NAME
mkdir /$NAME/files
cd /$NAME/files
put /tmp/$NAME.$date.tar.gz
mkdir /$NAME/databases
cd /$NAME/databases
put /tmp/$NAME.$date.sql
quit
FTP
echo 'ФТП-сеанс: конец.'
#удаление временых файлов.
echo 'Удаляю временные файлы в локальной системе.'
rm "/tmp/$NAME.$date.tar.gz"
rm "/tmp/$NAME.$date.sql"
echo "--- Работа завершена - $datetime ---"
exit
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.07.2015, 13:48
Ответы с готовыми решениями:

Скрипт резервного копирования
Помогите, пожалуйста, написать скрипт резервного копирования заданной директории, имя архива должно содержать текущую дату. Буду очень...

Покритикуйте мой скрипт резервного копирования файлов
Покритикуйте мой скрипт, создающий резервные копии всех файлов текущего каталога и перемещающий их в новый каталог. #!/bin/sh ...

Не работает скрипт резервного копирования для новых файлов
find . -type f -mtime -10 -print0 | xargs -0 tar -cjf archive.tar.bz2 Не пашет на рабочем проект (добавилось порядка 2к картинок) -...

3
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
13.07.2015, 18:32
Заносить данные в массив для того чтоб получить его 1 элемент как-то это не совсем…
Bash
1
2
freespace=$(df --output='avail' / | tail -1)
projectsize=$(du --bytes --summarize "$PROJECTPATH" | cut -f1)
0
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 12
13.07.2015, 22:10  [ТС]
Спасибо за замечание, пока просто плохо понимаю язык.
Но, первую конструкцию я пробовал, на моей локальной машине она работала, а на удаленной нет. На удаленной centos, и там df без опции --output. Это точно, потому что в документации даже посмотрел.

Добавлено через 5 минут
А за --summarize - спасибо! не заметил этого в доке.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
14.07.2015, 00:18
Bash
1
2
3
4
5
freespace=$(df / | tr -s ' \n' '\t' | cut -f11)
freespace=$(df / | sed -n '$s/\(\S\+\s\+\)\{3\}\([0-9]\+\).*/\2/p')
freespace=$(df / | awk 'END{print $4}')
{ read ; read a b c freespace d ; } < <(df /)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.07.2015, 00:18
Помогаю со студенческими работами здесь

Создать назначенное задание реализующее следующий механизм создания резервного копирования данных в каталоге
Подскажите что тут не так и как должно работать? Задание: Создать назначенное задание реализующее следующий механизм создания...

Скрипт резервного копирования
Ребят помогите пожалуйста, я в Python очень плохо разбираюсь, учили мы его очень быстро, практически сами.Задали такую работу.Написать...

BAT резервного копирования
Есть BATник который папку добавляет в архив с текущей датой, как можно его дополнить что бы созданный архив с текущей датой закидывал в...

Организация резервного копирования
Всем ку! Подскажите источники (литературу, интернет ресурсы), по которым можно было бы изучить общие подходы к организации резервного...

Программа для резервного копирования
Нужна программа, обладающая нижеперечисленными возможностями: 1. резервное копирование выбранных данных на локальное FTP по расписанию ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru