есть прога бекап БД. так как ошибка в БД может быть обнаруженна через пол года то мне нада хронить кучу бекапов на разные числа у меня это выглядит примерно так:
0101ГГ.db
0107ГГ.db
0110ГГ.db
0111ГГ.db
0112ГГ.db
пон.db
вт.db
ср.db
чт.db
пт.db
сб.db
такие имена файлов все бы ничего да весят они по 150 метров в нормальном состоянии, а если бекапится во время работы с ним то доходит до 600. но и это не проблемма.
суть вот в чем появилась потребность бекапить еще несколько БД а их нада сохронять с другими временными интервалами, поэтому хочу прикрутить config файл. вот как это сделать пока что не разобрался.
wersa: конфиг файл для перла
Уточнить можно, что за прога?
перл скрипт самописный, с ним то все нормально хоть он и кривой, а вот как конфиг для него сделать что то недогоняю. из конфига он должен брать ИМЯ файла ПУТЬ к нему и ВАЖНОСТЬ файла - количество копий в месяц день год.
Самый простой способ прикрутить конфиг к перловому скрипту - чем-то типа:
------------- основной скрипт -------------
do "config.pl";
# юзаем переменные $filename, $filepath, $importance.
------------- config.pl -------------
$filename = 'lala-topola';
$filepath = '/var/log';
$importance = 'high';
---------------------------------------
допустим будет так
$fileneme = '1.db';
$filepath = '/mnt/2/';
$importance = 'high';
но это для одного файла? а для двух как сделать с этими же самыми переменными?
Юзай два конфиг-файла и передавай их имя в качестве параметра командной строки своему скрипту:
------------ скрипт -----------
do $ARGV[0];
# юзаем переменные
----------- config1.pl ------------
$fileneme = '1.db';
$filepath = '/mnt/2/';
$importance = 'high';
----------- config2.pl ------------
$fileneme = '2.db';
$filepath = '/mnt/1/';
$importance = 'low';
-------------------------------------
Запускаешь примерно так:
./script.pl config1.pl
или
./script.pl config2.pl
млин мне бы одним конфигом представь двадцать файлов двадцать конфигов будет а если двести !!!
а вот так можно?
[hight]
$fileneme = '1.db';
$filepath = '/mnt/2/';
[low]
$fileneme = '2.db';
$filepath = '/mnt/1/';
а в кронтабе
./script.pl hight
./script.pl low
Многосекционные конфиг-файлы придется парсить ручками (геморрой еще тот). А вообще, оно тебе надо? Не проще ли все три параметра, которые ты собрался брать из конфига, брать из командной строки?
Вместо ./script.pl high пиши
./script.pl 2.db /mnt/1 high
Дешево, сердито, и извращаться не надо.
вот еще что, он выполняет bpconf.pl а вот переменные от туда не берет.
do "/root/Desktop/test/bpconf.pl";
в bpconf.pl переменные
если в bpconf.pl пишешь print переменные, то распечатывает, а в прогу их не перекидывает
тоесть вот это будет работать или нет?
[hight]
$fileneme = '1.db';
$filepath = '/mnt/2/';
[low]
$fileneme = '2.db';
$filepath = '/mnt/1/';
а в кронтабе
./script.pl hight
./script.pl low
короче через do нада запускать конфиг а не главную прогу
[quote=wersa]короче через do нада запускать конфиг а не главную прогу[/quote]
Естественно.
Отсюда вывод: конфиг должен быть всего лишь куском перлового кода. Никаких секций типа [high] или [low] в перловом коде не бывает. Хочется секций - парси файл вручную, вручную распихивай строки по переменным или хэшам.
Кстати, у do есть одно неприятное свойство: если в файле, который он подгружает, наличествуют синтаксические ошибки, твой основной скрипт не умрёт в мучениях, а бодро пойдёт исполняться дальше (при этом переменные, которые были определены в конфиге, не загрузятся). Более подробно всё это расписано в perldoc -f do .
Ещё раз настоятельно советую посмотреть в сторону параметров командной строки - и конфиг-файлы писать не придётся, и скрипт будет гибче. Вызывать его станет труднее, ну дык можно параметры по умолчанию задать (хорош в этом плане модуль Getopt::Long ).
так хотелось бы чтоб именно прога хватала из конфы переменные
Зачем же парсить самому можно пойтить на CPAN:
http://www.cpan.org/modules/index.html
покопаться там, а лутше зайти на: http://search.cpan.org/
поискать по слову Config и/или IniFiles,
а лутше: Config::IniFiles
ЗЫ Я использовал libconfig-inifiles-perl-2.29, не жалуюсь.
Нарисовать быструю парсилку инишек на коленке для "унутреннего потребления" иногда быстрее и проще, чем лазить по CPAN, ставить модуль и потом с ним разбираться. Ну и опять же не факт, что у wersa есть рутовые права для установки модулей (хотя что-то мне подсказывает, что есть).
Сама идея хранить в конфиге такие данные, да еще и по секциям - кривовата... Тогда уж проще сделать "односекционный" конфиг, определить в нем массив (или хэш) значений, и выбирать из этого хэша нужные значения в зависимости от параметров командной строки. И просто, и модуль за собой таскать не придется в случае чего.
[quote=Zmey][color=olive]Нарисовать быструю парсилку инишек на коленке для "унутреннего потребления" иногда быстрее и проще, чем лазить по CPAN, ставить модуль и потом с ним разбираться. [/color][/quote]
Да если нужна минимальная функциональность написать проще...
В дальнейшем понадобиться расшириная функциональность?
Переписывать? Не проще разобраться сразу и не изобретать колесо?
[quote=Zmey][color=olive]Ну и опять же не факт, что у wersa есть рутовые права для установки модулей (хотя что-то мне подсказывает, что есть).[/color][/quote]
Модуль с CPAN-а можно поставить и не имея рутовые права!
[quote=stalker]Да если нужна минимальная функциональность написать проще...
В дальнейшем понадобиться расшириная функциональность?
Переписывать? Не проще разобраться сразу и не изобретать колесо?[/quote]
В данной конкретной ситуации - не проще. :)
А кроме того, если от конфиг-файлов понадобилась расширенная функциональность, значит, одно из двух: или программа стала ну уж [b]очень[/b] сложной и развесистой, или (что гораздо более вероятно) в программе изначально присутствуют ошибки ДНК.
[quote=stalker]Модуль с CPAN-а можно поставить и не имея рутовые права![/quote]
Можно. Но вот нужно ли? Глупо таскать за собой лишний модуль только ради того, чтобы иметь "правильные" конфиги для скрипта.
Впрочем, использовать модули с CPAN или нет - вопрос более религиозный, чем практический. Для модулей, которые выполняют "сложные" действия, всё более-менее понятно (нужно - качай и ставь, не руками же, скажем, разбирать структуру файла JPEG). А вот для модулей, делающих простые вещи, это скорее дело вкуса и религиозных убеждений. :)
Заделал все через do

Последние комментарии
10 лет 16 недель назад
10 лет 35 недель назад
10 лет 45 недель назад
10 лет 45 недель назад
11 лет 34 недели назад
11 лет 34 недели назад
11 лет 35 недель назад
11 лет 35 недель назад
11 лет 36 недель назад
11 лет 37 недель назад