wersa: конфиг файл для перла

17 сообщений / 0 new
Последнее сообщение
Гость
wersa: конфиг файл для перла

есть прога бекап БД. так как ошибка в БД может быть обнаруженна через пол года то мне нада хронить кучу бекапов на разные числа у меня это выглядит примерно так:
0101ГГ.db
0107ГГ.db
0110ГГ.db
0111ГГ.db
0112ГГ.db
пон.db
вт.db
ср.db
чт.db
пт.db
сб.db
такие имена файлов все бы ничего да весят они по 150 метров в нормальном состоянии, а если бекапится во время работы с ним то доходит до 600. но и это не проблемма.
суть вот в чем появилась потребность бекапить еще несколько БД а их нада сохронять с другими временными интервалами, поэтому хочу прикрутить config файл. вот как это сделать пока что не разобрался.

Dumus
Аватар пользователя Dumus
Не в сети
Зарегистрирован: 17/09/2010

Уточнить можно, что за прога?

Мой микроблог: http://juick.com/Dumus/

wersa (не проверено)

перл скрипт самописный, с ним то все нормально хоть он и кривой, а вот как конфиг для него сделать что то недогоняю. из конфига он должен брать ИМЯ файла ПУТЬ к нему и ВАЖНОСТЬ файла - количество копий в месяц день год.

Zmey (не проверено)

Самый простой способ прикрутить конфиг к перловому скрипту - чем-то типа:

------------- основной скрипт -------------
do "config.pl";
# юзаем переменные $filename, $filepath, $importance.
------------- config.pl -------------
$filename = 'lala-topola';
$filepath = '/var/log';
$importance = 'high';
---------------------------------------

wersa (не проверено)

допустим будет так

$fileneme = '1.db';
$filepath = '/mnt/2/';
$importance = 'high';

но это для одного файла? а для двух как сделать с этими же самыми переменными?

Zmey (не проверено)

Юзай два конфиг-файла и передавай их имя в качестве параметра командной строки своему скрипту:

------------ скрипт -----------
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

wersa (не проверено)

млин мне бы одним конфигом представь двадцать файлов двадцать конфигов будет а если двести !!!

а вот так можно?

[hight]
$fileneme = '1.db';
$filepath = '/mnt/2/';

[low]
$fileneme = '2.db';
$filepath = '/mnt/1/';

а в кронтабе
./script.pl hight
./script.pl low

Zmey (не проверено)

Многосекционные конфиг-файлы придется парсить ручками (геморрой еще тот). А вообще, оно тебе надо? Не проще ли все три параметра, которые ты собрался брать из конфига, брать из командной строки?
Вместо ./script.pl high пиши
./script.pl 2.db /mnt/1 high
Дешево, сердито, и извращаться не надо.

wersa (не проверено)

вот еще что, он выполняет 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

wersa (не проверено)

короче через do нада запускать конфиг а не главную прогу

Zmey (не проверено)

[quote=wersa]короче через do нада запускать конфиг а не главную прогу[/quote]
Естественно.
Отсюда вывод: конфиг должен быть всего лишь куском перлового кода. Никаких секций типа [high] или [low] в перловом коде не бывает. Хочется секций - парси файл вручную, вручную распихивай строки по переменным или хэшам.
Кстати, у do есть одно неприятное свойство: если в файле, который он подгружает, наличествуют синтаксические ошибки, твой основной скрипт не умрёт в мучениях, а бодро пойдёт исполняться дальше (при этом переменные, которые были определены в конфиге, не загрузятся). Более подробно всё это расписано в perldoc -f do .
Ещё раз настоятельно советую посмотреть в сторону параметров командной строки - и конфиг-файлы писать не придётся, и скрипт будет гибче. Вызывать его станет труднее, ну дык можно параметры по умолчанию задать (хорош в этом плане модуль Getopt::Long ).

wersa (не проверено)

так хотелось бы чтоб именно прога хватала из конфы переменные

stalker (не проверено)

Зачем же парсить самому можно пойтить на CPAN:
http://www.cpan.org/modules/index.html
покопаться там, а лутше зайти на: http://search.cpan.org/
поискать по слову Config и/или IniFiles,
а лутше: Config::IniFiles
ЗЫ Я использовал libconfig-inifiles-perl-2.29, не жалуюсь.

Zmey (не проверено)

Нарисовать быструю парсилку инишек на коленке для "унутреннего потребления" иногда быстрее и проще, чем лазить по CPAN, ставить модуль и потом с ним разбираться. Ну и опять же не факт, что у wersa есть рутовые права для установки модулей (хотя что-то мне подсказывает, что есть).
Сама идея хранить в конфиге такие данные, да еще и по секциям - кривовата... Тогда уж проще сделать "односекционный" конфиг, определить в нем массив (или хэш) значений, и выбирать из этого хэша нужные значения в зависимости от параметров командной строки. И просто, и модуль за собой таскать не придется в случае чего.

stalker (не проверено)

[quote=Zmey][color=olive]Нарисовать быструю парсилку инишек на коленке для "унутреннего потребления" иногда быстрее и проще, чем лазить по CPAN, ставить модуль и потом с ним разбираться. [/color][/quote]
Да если нужна минимальная функциональность написать проще...
В дальнейшем понадобиться расшириная функциональность?
Переписывать? Не проще разобраться сразу и не изобретать колесо?
[quote=Zmey][color=olive]Ну и опять же не факт, что у wersa есть рутовые права для установки модулей (хотя что-то мне подсказывает, что есть).[/color][/quote]
Модуль с CPAN-а можно поставить и не имея рутовые права!

Zmey (не проверено)

[quote=stalker]Да если нужна минимальная функциональность написать проще...
В дальнейшем понадобиться расшириная функциональность?
Переписывать? Не проще разобраться сразу и не изобретать колесо?[/quote]
В данной конкретной ситуации - не проще. :)
А кроме того, если от конфиг-файлов понадобилась расширенная функциональность, значит, одно из двух: или программа стала ну уж [b]очень[/b] сложной и развесистой, или (что гораздо более вероятно) в программе изначально присутствуют ошибки ДНК.

[quote=stalker]Модуль с CPAN-а можно поставить и не имея рутовые права![/quote]
Можно. Но вот нужно ли? Глупо таскать за собой лишний модуль только ради того, чтобы иметь "правильные" конфиги для скрипта.
Впрочем, использовать модули с CPAN или нет - вопрос более религиозный, чем практический. Для модулей, которые выполняют "сложные" действия, всё более-менее понятно (нужно - качай и ставь, не руками же, скажем, разбирать структуру файла JPEG). А вот для модулей, делающих простые вещи, это скорее дело вкуса и религиозных убеждений. :)

wersa (не проверено)

Заделал все через do

RSS-материал