Перейти к содержимому
Калькуляторы

freeradius 3 + rlm_perl + mysql

Всем привет. В freeradius 2 была такая ф-ция CLONE, в которой можно было инициализировать db коннектор. В freeradius 3 её , я так понял не стало. Вывернулся объявив:

use vars qw(%RAD_REQUEST %RAD_REPLY %RAD_CHECK $db);
...
sub DBCONN {
    if ( ! defined $db ){
        $db = DBI->connect("dbi:mysql:dbname=".DB_NAME.";host=".DB_HOSTNAME, DB_USER, DB_PASS, {'RaiseError' => 1});
    if ($DBI::err) {
            &ERROR("DB Connect Error. $DBI::errstr");
    }
    else {
        &INFO("DB Connect Success");
    }
    }
}

и вызываю DBCONN в каждой процедуре: authorize, accounting_start, accounting и т.д. Это есть правильно или надо както по другом? Спасибо

Изменено пользователем ichthyandr

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуй вставить вывод в лог, типа

if ( defined $db ) {
  debug_log("variable db has defined");
} else {
  $db = DBI->connect("dbi:mysql:dbname=".DB_NAME.";host=".DB_HOSTNAME, DB_USER, DB_PASS, {'RaiseError' => 1});
  if ($DBI::err) {
    &ERROR("DB Connect Error. $DBI::errstr");
  } else {
    &INFO("DB Connect Success");
  }
}

Заодно и нам расскажешь. Но кмк, скрипт будет запускаться при каждом authorize, accounting, authen. Если оное определено. Могу ошибаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

31 минуту назад, pppoetest сказал:

Попробуй вставить вывод в лог, типа


if ( defined $db ) {
  debug_log("variable db has defined");
} else {
  $db = DBI->connect("dbi:mysql:dbname=".DB_NAME.";host=".DB_HOSTNAME, DB_USER, DB_PASS, {'RaiseError' => 1});
  if ($DBI::err) {
    &ERROR("DB Connect Error. $DBI::errstr");
  } else {
    &INFO("DB Connect Success");
  }
}

Заодно и нам расскажешь. Но кмк, скрипт будет запускаться при каждом authorize, accounting, authen. Если оное определено. Могу ошибаться.

оно работает, DBCONN вызывается и коннектор инициализируется один раз, но радиус иногда падает, что не очень хорошо. Как вариант объявить $db как our, но думаю сильно не поможет

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

17 минут назад, Kolunchik сказал:

Падает под какой нагрузкой?

1к сессий, количество постоянное, апдейт 5 мин

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 12.07.2018 в 15:28, pppoetest сказал:

Попробуй вставить вывод в лог, типа


if ( defined $db ) {
  debug_log("variable db has defined");
} else {
  $db = DBI->connect("dbi:mysql:dbname=".DB_NAME.";host=".DB_HOSTNAME, DB_USER, DB_PASS, {'RaiseError' => 1});
  if ($DBI::err) {
    &ERROR("DB Connect Error. $DBI::errstr");
  } else {
    &INFO("DB Connect Success");
  }
}

Заодно и нам расскажешь. Но кмк, скрипт будет запускаться при каждом authorize, accounting, authen. Если оное определено. Могу ошибаться.

Нашел косяк, perl под гентой собрался без тредов, оно потянуло сборку фрирадиуса без CLONE

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.