nixp.ru v3.0

16 января 2017,
понедельник,
15:49:08 MSK

DevOps с компанией «Флант»
Аватар пользователя splinter
splinter написал 15 апреля 2008 года в 14:04 (469 просмотров) Ведет себя как четкий пацан; открыл 134 темы в форуме, оставил 1458 комментариев на сайте.

Поднял squid, mysql, для сбора статистики (по статье из OpN) создал таблицу и сделал два скрипта для сбора статистики:

1. /etc/squid/squid-to-mysql содержание:

#!bin/bash

cp /var/log/squid/logs/access.log /tmp/squidforparse.log

>/var/www/squid/access.log

awk '{print «INSERT INTO squid (ip,bytes,link,trans,time) VALUES(\"«$3»\«,»$5«,\»«$7»\«,\»«$9»\«,from_unixtime(»$1«));»};' < /tmp/squidforparse.log | mysql -D traffics -u root —password=mypasswd

rm -f /tmp/squidforpars.log

2. php-скрипт для отображения статистики /var/www/htdocs/index.php:

<?php
$color="»; $year = «»; $ipv4=getenv(«REMOTE_ADDR»);
$res = mysql_connect(«localhost», «root», «mypasswd») or die(«Fatal PHP 'MySQL CONNECT' error.»);
$res = mysql_select_db(«traffics») or die(«Fatal database query 'USE' error»);
if ($HTTP_GET_VARS["month"]==«list») {
$res = mysql_query(«SELECT DISTINCT(LEFT(time,7)) AS month,LEFT(time,4) AS year FROM squid ORDER BY year DESC,month DESC;»);
while ($rw=mysql_fetch_array($res)) {
if ($year<>$rw["year"]) {
$year=$rw["year"];
$table.=»
$year РіРѕРґ:»;
};
$table.="<a href=$PHP_SELF?month=».$rw["month"].«>».$rw["month"]."</a> »;
}; $otherlink="<a href=$PHP_SELF?>»;

} else {

system(»./ squid-to-mysql»);

if ($HTTP_GET_VARS["month"]=="») {

$res = mysql_query(«SELECT LEFT(NOW(),7) as month»);

$rw=mysql_fetch_array($res);

$cur_month=$rw["month"];

} else $cur_month=$HTTP_GET_VARS["month"];

$res = mysql_query(«SELECT round(sum(bytes)/10000)/100 as trf,ip FROM squid WHERE (LEFT(time,7)=’$cur_month’) AND (trans<>’NONE/-’) GROUP BY ip ORDER BY LENGTH(ip),ip;»);

while ($rw=mysql_fetch_array($res)) {

if ($ipv4 == $rw["ip"]) $color=» bgcolor=’#FFDDDD’»;

else $color=»;

$table.=»

и т.д.

я не силен в php, проблема в том что не отрабатывается 1 скрипт при вызове статистики, тоесть если сделать sh /etc/squid/squid-to-mysql а потом просмотреть статистику она будет актуальной, а если просто просматривать http://localhost/index.php она не актуальна, проблема где то в районе system(»./ squid-to-mysql»); я уже пробовал и system(«./etc/squid/squid-to-mysql»); и system(«sh /etc/squid/squid-to-mysql»); подскажите плиз.

Anarchist

Не вижу корректного вызова shell-скрипта.

Например:

exec("rm -rf /");

(запускать с правами root’а :) ).

Дмитрий Шурупов


system("./ squid-to-mysql");

— это жуткий бред.

Автор, видимо, имел в виду

system("./squid-to-mysql");

Что актуально для случая нахождения в каталоге с этим скриптом во время исполнения и соответствующих прав у скрипта (+x для исполняющего его пользователя).

Пробовать лучше тогда уж так:

system("/etc/squid/squid-to-mysql");

(Без точки в начале!)

И проверять права на исполнение этого файла.

И логи apache/php смотреть на возникающие проблемы…

rgo

Почитай внимательно ман на php’шный system. Там запросто могут быть какие-нибудь опции из php.ini, которые влияют на его работу. На php пишет каждый кому не лень, и использовать функцию system безопасно далеко не у каждого из них получается.

splinter
Автор, видимо, имел в виду

Код:

system(«./squid-to-mysql»);


ага, именно это и имелось в виду.

Спасибо Шурупу, именно без точки отработало, по совету rgo пошел ушел ман :)

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.