mix_forever Опубліковано 28 Квітня, 2016 в 10:06 #1 Опубліковано 28 Квітня, 2016 в 10:06 Опшем ситуація наступна: Є FreeBSD 10.1 + Apache + PHP + MySql. Всьо паше супер, нарыкань нема. Реалізував я на цій машинці простенький Хотспот на ipfw Людина конектиться до ві-фі, її дефолтом кидає на сторінку з кнопкою - "Отримати 30хв інтернета", після натискання на яку в таблицю ipfw добавляються правила на цей хост + в базу заноситься номер цих правил і таймкод початку юзанія інета. Інтет з"являється, людина щаслива. Далі в кронтабі прописано шоб кожну хвилину виконувався php скрипт, який перевіряє базу на предмет того чи якийсь з отих таймкодів не перевизив ліміт в 30хв. Всьо логічно. При перевищенні запускається скрипт, який по ідеї мав би видаляти запис з бази і видаляти правила на хост, який вичерпав ліміт. Трабл в тому, шо запис з бази видаляється, а вот з таблиці ipfw - НЄ. Приклад скрипта осьо: <?php require_once('config.php'); //“ут из базы выбираютс¤ те пользователи, у которых привышен лимит по времени, и эти пользователи отключаютс¤ от интернета путем удалени¤ их правил из файрвола. $sql = 'SELECT * FROM hotspot WHERE time_begin > 0 AND (TIME_TO_SEC(TIMEDIFF(NOW(), time_begin)) > '.CLIENTS_TIME.')'; $res = mysql_query($sql); if ($res) { while ($user = mysql_fetch_assoc($res)) { $command = sprintf(RULE_DEL_IP, $user['rule_num']); exec($command); $command2 = sprintf(RULE_DEL_IP2, $user['rule_num']+100); exec($command2); $sql = 'DELETE FROM hotspot WHERE rule_num='.$user['rule_num']; mysql_query($sql); } } ?> RULE_DEL_IP задефайняно в config.php і виглядає так: define('RULE_DEL_IP', '/usr/local/bin/sudo /sbin/ipfw delete %s'); define('RULE_DEL_IP2', '/usr/local/bin/sudo /sbin/ipfw delete %s'); Всьо логічно... Но ніхера не работає... Другий день мозг ломаю... Главне шо конструкція типу $command = sprintf(RULE_ADD_IP, $rule_num, $user_ip); exec($command); Де define('RULE_ADD_IP', '/usr/local/bin/sudo /sbin/ipfw add %s allow ip from any to %s via ed0'); define('RULE_ADD_IP2', '/usr/local/bin/sudo /sbin/ipfw add %s allow ip from %s to any via ed0'); Прєлєстно работає. І да, в логах ошибок нема. Вопше. я вже даже варни на максимум виставив і нічого. З.І. До правил прошу не домахуватись. То тіко тестова конструкція, для наглядності. В реалі потім буде всьо завернуто в таблиці з індивідуальними правилами для кожного хоста і пайпами для нарізки швидкості. Мені головне шоб воно тіко заработало ) З.І.І. Я не php прогер, пасєму конструкція можу бути і карявою, но то таке, мені главне шоб воно пахало Вопшем глобальний вапрос - чого не удаляє правила з ipfw?)
Адміністратори t0rik Опубліковано 29 Квітня, 2016 в 08:56 Адміністратори #2 Опубліковано 29 Квітня, 2016 в 08:56 /usr/local/etc/sudoers шо там пише?
mix_forever Опубліковано 29 Квітня, 2016 в 11:26 Автор #3 Опубліковано 29 Квітня, 2016 в 11:26 www ALL=NOPASSWD:/etc/rc.d/ipfw, /sbin/ipfw
mix_forever Опубліковано 29 Квітня, 2016 в 15:40 Автор #4 Опубліковано 29 Квітня, 2016 в 15:40 НЕ удаляє... Варни пише, но не пише чого... 15 і 18 стрічки то якраз вивід варнів... Вот а фак?
mix_forever Опубліковано 29 Квітня, 2016 в 15:44 Автор #5 Опубліковано 29 Квітня, 2016 в 15:44 І ше одна фігня дивна. В логи пише час на 3 години менший реального. по date видає вірний час і дату. вони по ntp синхроняться... Якого чорта в логах -3 години? ТАйм зон стоіть Кийов
mix_forever Опубліковано 29 Квітня, 2016 в 17:36 Автор #6 Опубліковано 29 Квітня, 2016 в 17:36 1800 то мій глюк, я не то в конфі прописав... А 100 і 300 то всьо так і має бути. я ж правила потім вручну видаляю, вот вони і знов зі 100 починаються... Опщем правила якраз ті... Чого не удаляє - неясно.
mix_forever Опубліковано 29 Квітня, 2016 в 17:41 Автор #7 Опубліковано 29 Квітня, 2016 в 17:41 коли з шела вручну виконую то само - паше. як із скрипта - нє... Мля, вже сиджу видумую колстиль, який би замість бази створював автоматом скрипт з назвою - час додавання і автоматом в крон пхав би запис шоб через пів години його виконувало. В скрипт передати правила які мають видалитись в той момент і після них - команду ремува скріпта з крона ) ПОтім раз в годину будуть чиститись самі скрипти з т аймкодом більше півчаса... Костиль знатний... Но вже реально хз як то всьо заставить пахать...
adebt Опубліковано 29 Квітня, 2016 в 18:58 #8 Опубліковано 29 Квітня, 2016 в 18:58 В команду exec додай другий параметр, це буде змінна-масив, куди запишеться весь вивід команди (включаючи помилки). Після exec зроби print_r Типу так: <?php $command = 'ls -la'; $output = array(); exec($command, $output); print_r($output); http://php.net/manual/en/function.exec.php
Рекомендовані повідомлення
Заархівовано
Ця тема знаходиться в архіві та закрита для подальших відповідей.