Автор Тема: Cron script for backup  (Прочетена 6494 пъти)

ivo_18

  • Напреднали
  • *****
  • Публикации: 64
  • Distribution: Slackware 13.37
    • Профил
Cron script for backup
« -: Mar 12, 2012, 19:14 »
Здравейте,
Понеже изобщо не съм на ясно с писането на скриптове, искам да попитам как мога да създам и как ще изглежда скрипт в който да има въведена команда за копиране на една директория която се намира на един сървър, като копирането да се извърши върху една локална машина, която да ползвам за бекъп. Питането ми е продиктувано от тази тема --> http://www.linux-bg.org/forum/index.php?topic=42767.new#new

Положението е следното. Да речем че сървъра на който ми се намира фолдъра който искам да копирам всеки ден в 01:00 ч. сутринта, е с IP: 192.168.0.150. Но на този сървър е инсталиран EXSi 5.0 който явно няма cron demon и crontab на него, поне ако по подразбирането трябва crontab-a да бъде в /etc, то на ESXi 5.0 го няма. За това, съм решил да използвам друга машина на която има линукс - openSUSE, където crontab присъства в /еtc

Ta в машината с openSUSE (192.168.0.160) където може да се изпълнявам cron и да се редактира crontab-a, ми се иска да мога да копирам директория от сървър ЕSXi (192.168.0.150) на локална windows-ка машина с IP: 192.168.0.170

До колкото разбрах, командата която трябва да се изпълнява е scp -r, но останалата работа с настройките, не ми стана ясна.

Пътя до фолдъра който искам да копирам и който се намира на ESXi (192.168.0.150) e:

/vmfs/volumes/IvoWork/Test_Machine

И това искам да се копира всяка вечер в 01:00 ч. на локалната windows-ка машина  (192.168.0.170), като мястото където ми се иска да бъде копирана директорията е:

D:\Backup_Test_Machine

Нямам идея как може да се изпълни това чрез скрипт, който да седи на машината на която има openSUSE (192.168.0.160)

Някой може ли да помогне, че съм го закъсал доста.

Предварително благодаря.

Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Cron script for backup
« Отговор #1 -: Mar 13, 2012, 03:43 »
Значи като начало погледни /var/spool/cron/crontabs/root, което би трябвало да се намира крон за ESXi 5.0 (ESXi е просто преработен РедХат). Ако да елиминираме посредника и може да работим само с виндовс и ESXi.  Следваща стъпка е какъв сървър работи на твоя виндовс? Споменаваш scp, което предполага ssh сървър, което пък аз мисля че едва ли си инсталирал. Затова ще те препратя към нещо, което със сигурност работи - виндовс споделяне (CIFS/Samba). Как да монтираш директорията от виндовс във твоя сървър е описано тук: http://www.linuxquestions.org/questions/linux-newbie-8/bash-script-to-copy-files-to-samba-share-653093/ . След което копираш /vmfs/volumes/IvoWork/Test_Machine в точката на монтиране, и размонтираш. В най-общи линии това ще изглежда така:
Код:
#!/bin/bash
mount -t cifs //192.168.0.170/Backup_Test_Machine /mnt/remote_smb_share -o user=myuser_here,password=mypasswd_here
sleep 10
cp -a /vmfs/volumes/IvoWork/Test_Machine /mnt/remote_smb_share/
sleep 10
umount /mnt/remote_smb_share
Ако се наложи да намесваме и посредника openSUSE нещата само леко ще се усложнят с вкарване на scp и ssh ключ, да се надяваме няма да е необходимо. Като начало пробвай да достигнеш виндовс директорията както е описано във linuxquestions форума, после да я монтираш и размонтираш ръчно с командите и накрая може да преправиш и ползваш скрипта.
« Последна редакция: Mar 13, 2012, 03:49 от dejuren »
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Cron script for backup
« Отговор #2 -: Mar 13, 2012, 09:18 »
rsync-remotehost-backups.sh:
Код
GeSHi (Bash):
  1. #!/bin/sh
  2.  
  3. RSYNC=/usr/bin/rsync
  4. SSH=/usr/bin/ssh
  5. KEY=/home/thisuser/cron/thishost-rsync-key
  6. RUSER=remoteuser
  7. RHOST=remotehost
  8. RPATH=/remote/dir
  9. LPATH=/this/dir/
  10.  
  11. $RSYNC -az -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH
cron (за backup всеки ден в 5 сутринта):
Код
GeSHi (Bash):
  1. 0 5 * * * /home/thisuser/cron/rsync-remotehost-backups
или (за backup всеки петък в 5 сутринта):
Код
GeSHi (Bash):
  1. 0 5 * * 5 /home/thisuser/cron/rsync-remotehost-backups
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

ivo_18

  • Напреднали
  • *****
  • Публикации: 64
  • Distribution: Slackware 13.37
    • Профил
Re: Cron script for backup
« Отговор #3 -: Mar 13, 2012, 13:40 »
Много благодаря за навигирането във ESXi
Намерих root файла, който изглежда така:

/var/spool/cron/crontabs # vi root
#min  hour day mon dow command
1       1       *     *       *     /sbin/tmpwatch.py
1       *        *     *       *    /sbin/auto-backup.sh
0       *        *     *       *    /usr/lib/vmware/vmksummary/log-heartbeat.py

На локалната машина на която искам да правя бекъп-а, е инсталиран Windows XP.
На нея имам и инсталиран SSH Secure Shell Client.

Сега, някои неща не са ми ясно, като например:

Какво представлява това:

/mnt/remote_smb_share -o

Това кой път е?

Какво представлява това:

sleep 10

Какво се изпълнява с него?

По отношение на sh файла:

rsync-remotehost-backups.sh:

Къде, в коя директория да го запазя?

А относно кода,  какво представлява:

thishost-rsync-key

Това паролата на сървъра от който ще копирам директорията ли трябва да бъде?

$RSYNC -az -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH - Какво се изпълнява с това?

Съжалявам, че питам такива неща, но съм много бос по тях.
Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Cron script for backup
« Отговор #4 -: Mar 14, 2012, 00:17 »
За сведение
Здрасти,

Благодаря ти за отговора който си ми написал в темата която пуснах. Сега, имам един проблем и той се изразява в това, че не мога да изпълня командата "mount" в ЕSXi 5.0. Явно тази версия е доста орязана.
Та след като не мога да изпълня "mount" предполагам, че трябва да се прехвърля на варианта с използването на сървъра който е с инсталиран openSUSE на него, за да мога да mount-на директорията която искам на сървъра който e с ESXi 5.0. На локалната машина на която искам да направя автоматичния бекъп и която е с windows xp инсталирах ssh server за windows и имам имам връзка към него, чрез ssh secure shell client и puTTy.
Така, сега идва момента как да напиша правилно sh файла който искам да се изпълни автоматично в cron на машината която има openSUSE. Като гледам нещо голяма мацаница стана с тия обяснения. Ще гледам да ти напиша каква е ситуацията за да не стане проблем.

Server openSUSE (192.168.0.160) - който ще се изпозлва за cron и за съхраняване и използване на .sh файла, който нямам идея как да го напиша при създалата се ситуация

Server ESXi 5.0 (192.168.0.150) - на който ми седи виртуалната машина която искам да бекъпвам. Пътя до виртуалната машина ми е:

/vmfs/volumes/IvoWork/Test_Machine

Local host с Windows xp (192.168.0.170)  с инсталиран ssh server на  него. Като директорията в която искам да се прави автоматичния бекъп е D:\Backup_Test_Machine

Ta, в създалата се ситуация как да направя .sh файла който да се изпълнява от cron? [_]3


Така, значи вече имаш всички парчета, остава да ги сглобиш в едно. Вземам за отправна точка машината с openSUSE. На нея монтираш директорията от виндовс от моя пост, след което правиш rsync от поста на b2l. От това което прочетох не си я "закъсал доста", а просто си доста начинаещ :) В този случай има два начина - някой да направи всичко точка по точка, или да ти се помогне с необходимата информация, за да се справиш сам. Аз лично предпочитам втория метод. И така:

http://wiki.ubuntuusers-bg.org/doku.php?id=firststeps -> "Ubuntu - пълен новобранец (За тези които нищо не разбират)" и "Работа с терминала".
Това за отскок. Сега малко ще поотговарям на въпроси:
Цитат
/mnt/remote_smb_share
Това кой път е?
Пътят в който монтираш споделената директория на виндовс
Цитат
sleep 10
Какво се изпълнява с него?
10 сек пауза между две команди. Помага за сигурно завършване на предишната команда (mount)
Цитат
rsync-remotehost-backups.sh:
Къде, в коя директория да го запазя?
Желателно в /usr/local/sbin

Цитат
thishost-rsync-key
Това паролата на сървъра от който ще копирам директорията ли трябва да бъде?
Не е парола, това е ключ. Може да си го представиш и като парола с дължина няколкостотин символа. Обменя се автоматично в началото на ssh връзка, след което ако този начин не е успешен потребителят се пита и за парола. Затова и свързването с ключ е по-сигурно (брут-форс на 10-20-30 символа парола не е същото като брут-форс на 500-600-700 символа ключ)
Цитат
$RSYNC -az -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH - Какво се изпълнява с това?
Синхронизация на отдалечената с локалната директория. Само файловете с изменения биват прехвърлени.

Последно скриптът в общи линии ще изглежда така:
Код:
#!/bin/sh

RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/home/thisuser/cron/thishost-rsync-key
RUSER=remoteuser
RHOST=remotehost
RPATH=/remote/dir
LPATH=/this/dir/
WHOST=windows_host
WDIR=Backup_Test_Machine

mount -t cifs //$WHOST/$WDIR $LPATH -o user=myuser_here,password=mypasswd_here
sleep 10
$RSYNC -az -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH
umount $LPATH

Празните места от рода на mypasswd_here /remote/dir thishost-rsync-key и други ще трябва да попълниш сам (като във формуляр ;)) Съвсем скоро имаше въпрос за ssh-key във форума, който също ще ти помогне. И последно - всички команди (чети - двете команди) трябва първо да изпълниш успешно ръчно в терминала на  openSUSE, след което да нагодиш скрипта с техните параметри. И в крайна сметка по този начин ssh сървърът на виндовс не ти е необходим. Ако все пак решиш твърдо да го използваш ще трябва двустъпково копиране между компютрите със временна директория върху openSUSE с достатъчно свободно място.

ПП модераторът да премести поста в секция начинаещи. Въпросът не е точно за програмиране, смятам че в секцията начинаещи проблемът ще получи повече внимание.
« Последна редакция: Mar 14, 2012, 01:15 от dejuren »
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

ivo_18

  • Напреднали
  • *****
  • Публикации: 64
  • Distribution: Slackware 13.37
    • Профил
Re: Cron script for backup
« Отговор #5 -: Mar 14, 2012, 10:26 »
Много благодаря за отговора, захващам се за работа.  [_]3

Eто този линк --> http://webcache.googleusercontent.com/search?q=cache:V9KRA_m-dwIJ:www.jdmz.net/ssh/+&cd=1&hl=bg&ct=clnk&gl=bg&client=opera

Също е полезен, на някой с моите проблеми може да му свърши работа.
« Последна редакция: Mar 14, 2012, 11:49 от ivo_18 »
Активен

ivo_18

  • Напреднали
  • *****
  • Публикации: 64
  • Distribution: Slackware 13.37
    • Профил
Re: Cron script for backup
« Отговор #6 -: Mar 14, 2012, 19:38 »
Здрвейте,
Появи се една грешка, която не знам от какво е причинена.
Ето .sh файла който създадох:

Код:
GNU nano 1.3.12            File: rsync-192.168.0.150-backups.sh                               

#!/bin/sh

RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/home/root/cron/192.168.0.160-rsync-key
RUSER=root
RHOST=192.168.0.150
RPATH=/vmfs/volumes/IvoWork/Test_Machine
LPATH=/mnt/Test_backup
WHOST=192.168.0.170
WDIR=Backup_Machine

mount -t cifs //192.168.0.170/Backup_Machine /mnt/Test_backup -o user=root,password=**********************
sleep 10
RSYNC -az -e "SSH -i KEY" root@192.168.0.150:/vmfs/volumes/IvoWork/Test_Machine

Направих crontab файл в който въведох следното:
Код:
40 18 * * * /usr/local/sbin/rsync-192.168.0.150-backups.sh

Но след като мина 18:40 нямаше никаква активност. Очевидно crontab-а не ми се изпълнява,

Опитах се да пусна ръчно процеса и ето какво ми излиза в терминала:

Цитат
[root@server150 sbin]# ./rsync-192.168.0.150-backups.sh
rsync: Failed to exec SSH: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(83) [receiver=2.6.8]
rsync: writefd_unbuffered failed to write 4 bytes [receiver]: Broken pipe (32)
rsync error: error in IPC code (code 14) at io.c(1119) [receiver=2.6.8]

Нямам представа къде греша.

Сега, може би греша ето тук:
Код:
mount -t cifs //192.168.0.170/Backup_Machine /mnt/Test_backup -o user=root,password=**********************

все пак user-a на уиндоуската ми машина не е root a e admin, но нямам представа.дали в това е грешката.

Някой да има идея къде ми е грешката?
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Cron script for backup
« Отговор #7 -: Mar 14, 2012, 19:44 »
Имаш ли инсталиран ssh изобщо?
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

kissow

  • Напреднали
  • *****
  • Публикации: 21
    • Профил
Re: Cron script for backup
« Отговор #8 -: Mar 14, 2012, 20:19 »
Здрвейте,
Появи се една грешка, която не знам от какво е причинена.
Ето .sh файла който създадох:

Код:
GNU nano 1.3.12            File: rsync-192.168.0.150-backups.sh                               

#!/bin/sh

RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/home/root/cron/192.168.0.160-rsync-key
RUSER=root
RHOST=192.168.0.150
RPATH=/vmfs/volumes/IvoWork/Test_Machine
LPATH=/mnt/Test_backup
WHOST=192.168.0.170
WDIR=Backup_Machine

mount -t cifs //192.168.0.170/Backup_Machine /mnt/Test_backup -o user=root,password=**********************
sleep 10
RSYNC -az -e "SSH -i KEY" root@192.168.0.150:/vmfs/volumes/IvoWork/Test_Machine

Направих crontab файл в който въведох следното:
Код:
40 18 * * * /usr/local/sbin/rsync-192.168.0.150-backups.sh

Но след като мина 18:40 нямаше никаква активност. Очевидно crontab-а не ми се изпълнява,

Опитах се да пусна ръчно процеса и ето какво ми излиза в терминала:

Цитат
[root@server150 sbin]# ./rsync-192.168.0.150-backups.sh
rsync: Failed to exec SSH: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(83) [receiver=2.6.8]
rsync: writefd_unbuffered failed to write 4 bytes [receiver]: Broken pipe (32)
rsync error: error in IPC code (code 14) at io.c(1119) [receiver=2.6.8]

Нямам представа къде греша.

Сега, може би греша ето тук:
Код:
mount -t cifs //192.168.0.170/Backup_Machine /mnt/Test_backup -o user=root,password=**********************

все пак user-a на уиндоуската ми машина не е root a e admin, но нямам представа.дали в това е грешката.

Някой да има идея къде ми е грешката?


като гледам грешката ти е в това че си махнал знакът $ и очакваш да ти се изпълни променлива

пример:

$rsync $ssh
и т.н

в случая когато подаваш команден ред "RSYNC -az -e "SSH -i KEY" root@192.168.0.150:/vmfs/volumes/IvoWork/Test_Machine[/code]" ти не викаш променлива $SSH а някаква несъществуваща команда с големи букви SSH :)  за да работи командният ред трябва да си дефинираш променливите с знак $ отпред иначе очаквай да се изпълни на куково лято :) а като гледам дори трябва да ти се крашва на RSYNC защото пак няма $ пред $рсинк :)
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Cron script for backup
« Отговор #9 -: Mar 14, 2012, 20:51 »
А относно crond, не е достатъчно само да редактираш файла със задачите.
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

ivo_18

  • Напреднали
  • *****
  • Публикации: 64
  • Distribution: Slackware 13.37
    • Профил
Re: Cron script for backup
« Отговор #10 -: Mar 15, 2012, 10:57 »
@b2l

Да, имам инсталиран ssh, тествах го и работи.

@kissow

О.к. ще поправя реда и ще видя какво ще се получи.

А относно crond, не е достатъчно само да редактираш файла със задачите.

Какво още е нужно?

Благодаря за насоките.  :)

« Последна редакция: Mar 15, 2012, 10:59 от ivo_18 »
Активен

kissow

  • Напреднали
  • *****
  • Публикации: 21
    • Профил
Re: Cron script for backup
« Отговор #11 -: Mar 15, 2012, 14:46 »
Относно кронтаба н е се редактира файла който е в /var/, а се прави през "crontab -e" :) и му добавяш ред с времето кога да се изпълни скрипта.
Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Cron script for backup
« Отговор #12 -: Mar 15, 2012, 15:45 »
Относно кронтаба н е се редактира файла който е в /var/, а се прави през "crontab -e" :) и му добавяш ред с времето кога да се изпълни скрипта.
Втори вариант - ако редактираш директно файла рестартираш cron демона: /etc/init.d/cron restart
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

ivo_18

  • Напреднали
  • *****
  • Публикации: 64
  • Distribution: Slackware 13.37
    • Профил
Re: Cron script for backup
« Отговор #13 -: Mar 15, 2012, 19:39 »
Имам голям проблем, а той е, че виртуалния диск на машината която искам да копирам е 210 ГБ а нямам толкова място на локалната машина която искам да използвам за бекъпа.

Има ли вариант само данните от виртуалния диск да се бекъпват, как и по какъв начин?

към момента turnkeyredmine.vmdk е:

Size: 4 533 248,00 KB      Provisioned Size: 209 715 200,00 КВ

Как мога да процедирам в случай. Нямам възможност да прехвърля цялата директория на виртуалната машина, и следва, как мога да ги екстрактна тези 4 533 248,00 KB  които има до момента?

Като за начало, ще ползвам тези команди, съответно за базата от данни и за приакачените файлове:

Database
/usr/bin/mysqldump -u <username> -p <password> <redmine_database> | gzip > /path/to/backup/db/redmine_`date +%y_%m_%d`.gz

Attachments
rsync -a /path/to/redmine/files /path/to/backup/files

Но как ще излгежда командата ако трябва да прехвърля базата от данни и прикачените файлове на уиндоуска машина?

Може би така:

#Database

/usr/bin/mysqldump -u root -p123456 <redmine_database> | gzip > admin@192.168.0.170:/Redmine_Backup_`date+%y_%m_%d`.gz

Ето това "<redmine_database>" не ми стана ясно кое и къде се намира. Може би Redmine има директория в която седят Msql файловете, но аз не я намерих.

А това "`date+%y_%m_%d`" остава ли така както си е, ако да речем искам да правя копирането всяки ден от годината или трябва да е заместено по някакъв начин, да речем нещо такова "`date+%2012_%3_%18 - като това да оказва, че трябва копирането да бъде извършено на 18.03.2012 г.?

По отношение на това --> "Attachments
rsync -a /path/to/redmine/files /path/to/backup/files" нямам представа в коя директория седят файловете които се прикрепят.

Някой има ли идея?
« Последна редакция: Mar 15, 2012, 22:28 от ivo_18 »
Активен

kissow

  • Напреднали
  • *****
  • Публикации: 21
    • Профил
Re: Cron script for backup
« Отговор #14 -: Mar 16, 2012, 10:49 »
Относно кронтаба н е се редактира файла който е в /var/, а се прави през "crontab -e" :) и му добавяш ред с времето кога да се изпълни скрипта.
Втори вариант - ако редактираш директно файла рестартираш cron демона: /etc/init.d/cron restart
хах и тва е решение но не виждам никъв смисъл да пише човек много :)
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
cron
Настройка на програми
sunhater 2 2443 Последна публикация Nov 02, 2003, 21:27
от sunhater
Проблем с cron - не стартира нищо
Настройка на програми
senser 5 3205 Последна публикация Oct 07, 2005, 11:52
от sunhater
Cron > Backup > Mail ?!?
Настройка на програми
SRG 10 4102 Последна публикация Mar 11, 2006, 21:36
от SRG
Малко пощош относно cron
Настройка на програми
abadon 3 2288 Последна публикация Jan 18, 2007, 14:21
от abadon
Cron работи ли?
Настройки на софтуер
anakinn 2 2575 Последна публикация Jun 26, 2007, 17:25
от anakinn