LINUX.ORG.RU
ФорумAdmin

Нужна помощь по скрипту

 ,


0

1

Добрый день. Помогите плз допилить код чтобы в tar.gz запаковывалась каждая директория


#!/bin/sh

#mkdir -p "/mnt/archive/`date +%F`"

start=$(date +%s)

rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test0 /mnt/archive/test0
rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test1 /mnt/archive/test1
rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test2 /mnt/archive/test2
rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test3 /mnt/archive/test3
rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test4 /mnt/archive/test4
finish=$(date +%s)

echo "`date` - full_backup processing: $((finish - start)) seconds">>backup.log



Последнее исправление: goladranec (всего исправлений: 2)

Ответ на: комментарий от Black_Shadow

К примеру так будет работать? Просто не очень разбираюсь пока что

rsync -e ssh --exclude 'distr' -a root@192.168.1.100:/mnt/data/test0 tar -czPf /mnt/archive/test0/'test0 - '`date '+%F'`.tar.gz

goladranec
() автор топика
Ответ на: комментарий от Black_Shadow

нет, я имею ввиду что tar, будет же запаковывать каталог test0 в tar.gz ? если код будет таким как ниже.

#!/bin/sh

#mkdir -p "/mnt/archive/`date +%F`"

start=$(date +%s)

rsync -e ssh --exclude 'distr' -a root@192.168.1.100:/mnt/data/test0 tar -czPf /mnt/archive/test0/'test0 - '`date '+%F'`.tar.gz
finish=$(date +%s)

echo "`date` - full_backup processing: $((finish - start)) seconds">>backup.log
goladranec
() автор топика
Ответ на: комментарий от goladranec

Я же написал уже. Нельзя писать команды в одну строчку одна за одной без разделения. В твоём случае получается, что tar у тебя - это аргумент к rsync. Но у rsync нет такого аргумента. Ещё одна ошибка - ты не указал tar'у, что архивировать.

Black_Shadow ★★★★★
()
Последнее исправление: Black_Shadow (всего исправлений: 2)
Ответ на: комментарий от Black_Shadow

То есть разделив команды вот так как ниже будет работать?

rsync -e ssh --exclude 'distr' -a root@192.168.1.100:/mnt/data/test0 ; tar -czPf /mnt/archive/test0/'test0 - '`date '+%F'`.tar.gz

goladranec
() автор топика
Ответ на: комментарий от Black_Shadow

Просто у меня получается с удаленного сервера нужно сделать бэкап на другой между ними у меня настроен доступ ssh по ключу, tar'у мне нужно будет указать каталог с удаленного сервера, а как это правильнее указать?

goladranec
() автор топика
Ответ на: комментарий от Black_Shadow

Я вот понимаю если бы на одной машине выполнялось то бы вот так бы указал каталог от куда брать.

tar -czPf /mnt/archive/test0/'test0 - '`date '+%F'`.tar.gz /mnt/test0/
goladranec
() автор топика
Ответ на: комментарий от Black_Shadow

Это у меня сейчас под рукой машина с эти каталогом это куда мне нужно сложить файлы */mnt/archive/test0/

а вот это -a root@192.168.1.100:/mnt/data/test0 что нужно запаковать tar'ом и скопировать в */mnt/archive/test0/

goladranec
() автор топика
Ответ на: комментарий от Black_Shadow

Сейчас да у меня с удаленного сервера копируются каталоги, а как бы это сделать чтобы сразу паковалось tar'ом и копировалось?

goladranec
() автор топика
Ответ на: комментарий от goladranec

Тогда тебе rsync не нужен. Команде ssh можно передать аргументом команду, которую надо выполнить на удалённом хосте. Типа такого:

ssh user@host "tar czf /tmp/archieve.tar.gz && dd if=/tmp/archieve.tar.gz && rm /tmp/archieve.tar.gz" | dd of=/path/to/local/archieve.tar.gz

Black_Shadow ★★★★★
()
Последнее исправление: Black_Shadow (всего исправлений: 1)
Ответ на: комментарий от goladranec

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

vodz ★★★★★
()
Ответ на: комментарий от Black_Shadow

У меня там ошибка, к аргументам tar надо добавить архивируемый каталог.

ssh user@host "tar czf /tmp/archieve.tar.gz /mnt/data/test0 && dd if=/tmp/archieve.tar.gz && rm /tmp/archieve.tar.gz" | dd of=/path/to/local/archieve.tar.gz
Но и это я бы не советовал использовать в продакшене, нужна обработка ошибок, которой здесь нет. Но это уже отдельная тема.

Black_Shadow ★★★★★
()
Последнее исправление: Black_Shadow (всего исправлений: 2)
Ответ на: комментарий от Black_Shadow

f /tmp/archieve.tar.gz
dd if=/tmp/archieve.tar.gz
rm /tmp/archieve.tar.gz

Жуть. Почему просто не использовать поток?

ssh user@host 'tar cz /remote/path' > mylocal.tar.gz

YAR ★★★★★
()
Последнее исправление: YAR (всего исправлений: 1)
Ответ на: комментарий от goladranec

А если вот таким способом сделать, на удаленном сервере выполнить скрипт чтобы в архивы запаковывал.

#!/bin/sh
#backup.sh

tar -czPf /mnt/archive/'name1 - '`date '+%F'`.tar.gz  /mnt/date/name1/
tar -czPf /mnt/archive/'name2 - '`date '+%F'`.tar.gz  /mnt/date/name2/
tar -czPf /mnt/archive/'name3 - '`date '+%F'`.tar.gz  /mnt/date/name3/
tar -czPf /mnt/archive/'name4 - '`date '+%F'`.tar.gz  /mnt/date/name4/
tar -czPf /mnt/archive/'name5 - '`date '+%F'`.tar.gz  /mnt/date/name5/

А на сервере приемнике сделать другой скрипт который бы копировал уже запакованные архивы tar.gz

#!/bin/sh
#mkdir -p "/mnt/archive/`date +%F`"
start=$(date +%s)
rsync -e ssh -a root@192.168.1.100:/mnt/archive/ /mnt/archive/
finish=$(date +%s)
echo "`date` - full_backup processing: $((finish - start)) seconds">>bkup.log

А далее на удаленном сервере выполнялся еще один скрипт освобождающие место


Удаление бэкапов старше n дней
# Количество дней
day=n
# Путь до папки с файлами
where_find="/mnt/archive"

find $where_find -name "*.tar.gz" -type f -mtime +$day -delete
#Сохранение логов
find $where_find -name "*.tar.gz" -type f -mtime +$day -delete > $where_find/log.txt
cat $where_find/log.txt
goladranec
() автор топика
Ответ на: комментарий от goladranec

Плохое решение.
1.

на удаленном сервере выполнить скрипт чтобы в архивы запаковывал.

Может и зависнуть, может еще не закончить работу....
2.

А на сервере приемнике сделать другой скрипт который бы копировал уже запакованные архивы tar.gz

см. п.1 что скопировали мы не знаем, архив может быть не полным

anc ★★★★★
()
Ответ на: комментарий от anc

Тогда как лучше сделать?

Вот в таком виде да работает, с удаленного сервера копирует на backup сервер. Но это чисто без сжатия и архивирования копирует.

#!/bin/sh

#mkdir -p "/mnt/archive/`date +%F`"

start=$(date +%s)

rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test0 /mnt/archive/test0
rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test1 /mnt/archive/test1
rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test2 /mnt/archive/test2
rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test3 /mnt/archive/test3
rsync -e ssh --exclude 'distributive' -a root@192.168.1.100:/mnt/data/test4 /mnt/archive/test4
finish=$(date +%s)

echo "`date` - full_backup processing: $((finish - start)) seconds">>backup.log

А как сделать чтобы сразу архивировал?

goladranec
() автор топика
Ответ на: комментарий от goladranec

Вам выше уже примеры привели.

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.