|
|
|
РАЗРАБОТКИ
|
Правене на архиви по "лесния начин"
|
|
|
|
|
|
от Славей Караджов(6-02-2007)
рейтинг (14)
[ добре ]
[ зле ]
Вариант за отпечатване С публикуването на кода на сайта като свободен софтуер, публикувахме и няколко интересни скрипта за създаване на архиви на съдържанието на важни директории или бази от данни както и тяхното разпращане по други сървъри.
В тази статия ще се опитам да ви запозная с възможностите им.
От къде да свалите приложението
Има две възможности.
Едната е да свалите последната версия на maintainer пакета от
http://openfmi.net/frs/?group_id=177
Другата е да свалите последна SVN версия. Това може да направите с командата:
svn checkout https://svn.openfmi.net/linux-bg/trunk/maintainer/
Изисквания за работа с приложението
Скриптове използват следните външни програми: cp, mv, tar, mysql, scp.
Допълнително се нуждаете от модула Expect и Net::FTP ако искате да използвате SSH и FTP за сваляне или копиране.
Тези модули може да свалите от CPAN. (perl -MCPAN -e shell).
Примери
Примери как може да използвате maintainer.pl
maintainer.pl е създаден за да улесни задачата по архивирането на база данни, файл или директория
и копирането на архивите на отдалечен сървър посредством SSH или FTP.
maintainer.pl се стартира с два аргумента от командния ред - "източник" и "крайна цел"
И двата аргумента използват този формат: [encaps:]protocol://user:password@base/details
Вижте примерите по-долу за подробности
Пример 1
Честа задача в наши дни е копиране на съдържанието на mysql база от данни и архивирането на това съдържание във файл.
Това може да се направи със следната команда:
$ maintainer.pl mysql://username:password@host/database/ tar:///local/file.tgz
Пример 1.1
Тъй като стартирането на тази команда от командния ред или от вашия crontab може разкрие тайна информация, като вашата парола
за mysql например, на другите потребители, то е добре секретната информация да се запише в config.pm файла.
Това става по следния начин. Отваряте config.pm файла и в него добавяте следния ред:
$CONFIG{'DB_PASS'} = 'my_db_pass';
След което използвайте [DB_PASS] в командния ред, вместо истинската парола.
Скриптът maintainer.pl автоматично ще замени [DB_PASS] със зададената от вас стойност. В случая това е "my_db_pass".
След като сте добавили вашата парола в конфигурационния файл, може да изпълните командата по следния начин:
$ maintainer.pl mysql://username:[DB_PASS]@host/database/ tar:///local/file.tgz
Вижте файла config.pm за подробности.
Пример 2
Пазенето на архивите на базата от данни на същия хард диск на която се намира тя, или пазенето на архивите на дадена директория, не е добра идея, защото ако хард диска се развали, то губите и архивите. Затова е добра идея да копирате вашите архиви на отдалечен сървър.
Това може да се направи по следния начин:
$ maintainer.pl mysql://username:password@host/database/ tar:ftp://user:[FTP_PASS]@server/full/path/to/file
В този пример вземаме информацията от mysql, архивираме я с "tar" и посредством FTP изпращаме архива на отдалечен сървър.
Обработващи под-команди
Може би сте забелязали, че "tar:ftp://user:[FT..." не изглежда като това което сте очаквали "ftp://user:[FT...".
Командата "tar" преди "ftp" е командата която се грижи за обработването на информацията преди изпращането й с FTP.
Пример 2.2
Може да изпълните командата по-следния начин, ако искате да изпратите вашите архиви на отдалечен сървър
посредством SSH за по-голяма сигурност:
$ maintainer.pl mysql://username:password@host/database/ tar:ssh://user:[SSH_PASS]@server/full/path/to/file
Забележка относно сигурността:
За предпочитане е да НЕ слагате root пароли за SSH, а да използвате ключове вместо това.
Разбира се вие сами решавате.
Пример 3
Досега ви демонстрирахме как база може да се архивира и изпрати на отдалечен сървър,
сега ще ви покажем как директория може да се архивира.
$ maintainer.pl file:///important/directory/ tar:ssh://user:[SSH_PASS]@server/full/path/to/file
$ maintainer.pl file:///important/directory/file tar:ssh://user:[SSH_PASS]@server/full/path/to/file
Поддържани "протоколи"
В момента може да използвате: file, mysql, ftp, ssh било то за описване на "източник" или за описване на "крайна цел".
tar може да използвате само за "крайна цел" или като команда обработваща информацията преди обработването и от протокола
грижещ се за "крайната цел".
Примери как може да използвате cleaner.pl
cleaner.pl е скрипт който изтрива файлове отговарящи на определен шаблон и по-стари от определен период.
Скриптът използва 3 аргумента:
1 - шаблона на файла
2 - тип време
3 - стойност време
Пример 1: Ако искате да изтриете всички файлове в директорията /tmp по-стари от 4-ри месеца:
$ cleaner.pl "/tmp/*" months 4
Забележка: Кавичките пред и след шаблона са ЗАДЪЛЖИТЕЛНИ.
За тип време може да посочите следните стойности:
timestamp - третира 3-ият аргумент като секунди след 1970-та година.
date - смята 3-ият аргумент за дата. Датата се задава във формат YYYY:MM:DD:HH:II
years - търси за файлове по-стари от "стойност време" години.
months - търси за файлове по-стари от "стойност време" месеци.
days - търси за файлове по-стари от "стойност време" дни.
hours - търси за файлове по-стари от "стойност време" часове.
minutes - търси за файлове по-стари от "стойност време" минути.
Автоматизиране на нещата
Лесно може да автоматизирането правенето на архивите с maintainer.pl и cleaner.pl като ги добавите към вашия crontab.
Ето и няколко "истински" примера от crontab на linux-bg.org сървъра:
# ----------------------------------------------------------------------------------
# Създаване на копия на базата всеки ден
15 4 * * * /path/to/script/maintainer.pl 'mysql://[DB_USER]:[DB_PASS]@[DB_HOST]/[DB_DATABASE]' 'tar:///path/to/backup/lbg-db-[__YMD__].sql.tgz' 1>/dev/null 2>>/path/to/backup/backup.log
# Изпращане на седмично копие на базата посредством SSH на отдалечен сървър
7 5 * * 5 /path/to/script/maintainer.pl 'file:///path/to/backup/lbg-db-[__YMD__].sql.tgz' 'ssh://[SSH_USER]:[SSH_PASS]@[REMOTE_SERVER]/full/path/to/backups/lbg-db-[__YMD__].sql.tgz' 1>/dev/null 2>> /path/to/backup/backup.log
# Създаване на копие на директорията с данните
23 5 * * 5,2 /path/to/script/maintainer.pl 'file:///path/to/data/data/' 'tar:///path/to/backup/lbg-data-[__YMD__].tgz' 1>/dev/null 2>>/path/to/backup/backup.log
# Изпращане на копието веднъж в седмицата на отдалечен сървър.
1 6 * * 3 /path/to/script/maintainer.pl 'file:////path/to/backup/lbg-data-[__YMD__].tgz' 'ssh://[SSH_USER]:[SSH_PASS]@[REMOTE_SERVER]/full/path/to/backups/lbg-data-[__YMD__].tgz' 1>/dev/null 2>>/path/to/backup/backup.log
# Изтриване на файлове по-стари от два месеца на локалната машина
15 14 * * 6 /path/to/script/cleaner.pl "/path/to/backup/lbg-*.tgz" months 2
# ----------------------------------------------------------------------------------
Това е. Забавлявайте се :)
Забележка:
* maintainer.pl и cleaner.pl са част LBG проекта: http://www.linux-bg.org.
* Сайтът на проекта се намира на адрес: http://openfmi.net/projects/linux-bg/
<< Прост и ефективен начин за backup с rsync | Програмиране графичен интерфейс (GUI) с Lazarus и freepascal >>
|
|
|
|
|
да откриеш колелото От: потребител На: 6-02-2007@13:50 GMT+2 Оценка: 1/НеутраленПреди да пишете нещо що не проверите дали някой не го е написал преди вас? Например в моята дистрибуция има една подобна програма - нарича се backupninja. Но има още ред такива. И се инсталира с apt-get.
[Отговори на този коментар]
Към: да откриеш колелото От: Мирчо Мирев <mircho< at >linux-bg__dot__org> На: 6-02-2007@14:05 GMT+2 Оценка: 1/НеутраленТи защо мислиш има повече от една програма в хранилището на твоята дистрибуция с една и съща функционалност?
[Отговори на този коментар]
Към: Към: да откриеш колелото От: потребител На: 6-02-2007@15:14 GMT+2 Оценка: 1/Неутраленна първо време се сещам за три причини:
1) не всички стават за нещо
2) и да стават, не винаги имат същата функционалност
3) поради причината, която цитирах по-горе. Много хора просто пишат, без да гледат какво има написано.
Можем много да спорим, но нямам време за полемики.
[Отговори на този коментар]
външният вид ... От: РТР На: 7-02-2007@0:54 GMT+2 Оценка: 2/Градивна критика
Малък коментар към външния вид на статията.
Поставянето на текст, който съдържа много дълги редове, в блоков елемент тип <pre> обикновено води до появяване на ленти за хоризонтално превъртане. Това прави страницата като цяло неудобно за разглеждане и отблъсква читателите още преди да са започнали да четат текста.
Какво може да се прави в такива ситуации? Може примерно да се поставят дългите редове в обикновен параграф (или в div, или в blockquote, и т.н.) и да се разделят с <br>. Може също да се скрие текста в отделен блоков елемент, който да се показва/скрива при щракване върху дадена препратка. И други неща могат да се направят в името на ползваемостта ... ;-)
0,02 лв.
Редактиран на: 7-02-2007@0:57
[Отговори на този коментар]
Към: външният вид ... От: Славей Караджов <slaff __@__ linux-bg__dot__org> На: 7-02-2007@14:26 GMT+2 Оценка: 1/НеутраленМда - ще го имаме в предвид при бъдещи подобрения. Може да пренаписваме автоматично pre етикета да става на div. Ако пък може да се направи с CSS или нещо подобно ще е още по-добре.
[Отговори на този коментар]
Към: Към: външният вид ... От: РТР На: 7-02-2007@22:31 GMT+2 Оценка: 1/НеутраленДа, звучи разумно,и аз съм с две ръце за CSS. Дано да се получи.
Поздравления за статията :)
[Отговори на този коментар] Към: Към: Към: външният вид ... От: spytheman <spytheman__at__users< dot >sourceforge< dot >net> На: 14-07-2007@15:37 GMT+2 Оценка: 1/НеутраленТова би трябвало да поправи проблема с твърде дългите редове в PRE таговете, и появата на хоризонтален скролер в браузърите.
( Източник: http://users.tkk.fi/~tkarvine/pre-wrap-...
)
<style>
pre {
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
</style>
[Отговори на този коментар]
Slavi......... От: Just a User На: 7-02-2007@21:03 GMT+2 Оценка: 1/НеутраленSlavi, ne se zaqjdai, prav si e 4oveka. Za da ima polza ot dadena statiq, tq trqbva da ima ne samo sydyrjanie, nali ?
P.S. BTW pozdravi za statiqta...:)
[Отговори на този коментар]
Към: Slavi......... От: Славей Караджов <slaff (a) linux-bg< dot >org> На: 7-02-2007@21:36 GMT+2 Оценка: 1/НеутраленНещо не ви разбирам хора? Кое точно е заяждане?
Редактиран на: 7-02-2007@21:37
[Отговори на този коментар]
Към: Към: Slavi......... От: Вальо На: 8-02-2007@20:01 GMT+2 Оценка: 1/НеутраленАз не виждам къде точно е проблема да има по няколко статии описващи един и същ елемент, функционалност и т.н. Все пак когато има избор, даден потребител може да избира м/у няколко варианта и да избере най-подходящия и разбираем за него.Все пак всеки има правото да пише в сайта и по-този начин да се изгражда самата идея... а не да се караме коя статия не била добра или имало такава .... Авторът не я е копирал от друга такава, а се е постарал да обясни по своя си начин, който от своя страна да бъде разбран от даден потребител.
Всяка една статия, било то лошо написана или не достатъчно изчерпателна винаги би била в полза, винаги можем да извлечем информация, било то незначително малка!
Хаиде както се казва правете любов, а не война!
И на здраве.... М/у другото съм потърпевш с мойта статия за pp2p за под слак :) е самата тя е поправена и написана такак както би ви харесала, но не мисля, че начинът на писане е важен, а това което може да извлече един потребител от нея.
[Отговори на този коментар]
Към: Вальо От: rosen На: 18-02-2007@8:22 GMT+2 Оценка: 1/Неутраленнапълно съм съгласен с теб.
Поздравления за статията.
[Отговори на този коментар]
Към: Към: Към: външният вид ... От: spytheman На: 14-07-2007@15:41 GMT+2 Оценка: 2/Образоващ/Мъдър
Това би трябвало да поправи проблема с твърде дългите редове в PRE таговете, и появата на хоризонтален скролер в браузърите.
( Източник: http://users.tkk.fi/~tkarvine/pre-wrap-... )
<style>
pre {
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
</style>
[Отговори на този коментар]
|
|
|
|
|
|
|
|