Зацикливать часть кода PHP каждые 15 секунд - PullRequest
0 голосов
/ 16 августа 2010

Я пытаюсь создать функцию регистрации с помощью php для инструмента, который собирает информацию о компьютере в Windows. Каждые 15 секунд будет создаваться текстовый файл с информацией внутри. я хочу, чтобы он работал в фоновом режиме, пока пользователь получает доступ к другим страницам и не прерывался.

Вот код, который я сейчас использую

<?php
        $tracker = $_GET['counter'];
        if (isset($tracker) && $tracker == 1)
        {
            $_SESSION['tracker'] = 1;

            $query = "SELECT hostname FROM computers ORDER BY hostname ASC";
            $computer_search = mysql_query($query);
            confirm_query($computer_search);

            while ($computers = mysql_fetch_array($computer_search)){
                $COMP = $computers['hostname'];
        $time = time();
        shell_exec('perl logger.pl ' . $COMP . ' >> logs/' . $COMP . '-' . $time . '.txt');
            }

            redirect_to('index.php?tracker=1');
        }
        elseif (isset($tracker) && $tracker == 0)
        {
            $_SESSION['tracker'] = 0;

            redirect_to('index.php?tracker=0');
        }
    ?>

Сначала я попытался использовать

    $query = "SELECT hostname FROM computers ORDER BY hostname ASC";
            $computer_search = mysql_query($query);
            confirm_query($computer_search);

            while ($computers = mysql_fetch_array($computer_search)){
                $COMP = $computers['hostname'];
                $time = time();
                // 1 is the counter entered into the perl script
                shell_exec('nohup perl logger.pl ' . $COMP . ' 1 > /dev/null 2> /dev/null >> logs/' . $COMP . '-' . $time . '.txt');
            }

Но код захватывает информацию только об одном компьютере и застревает в цикле, прежде чем захватить информацию о следующем компьютере. С другой стороны, первый код захватывает только данные всех компьютеров, но только один раз.

Что касается logger.pl, вот что я сделал.

    !/usr/bin/perl -w
    use BER;
    use SNMP_util;
    use SNMP_Session;

    $MIB1 = ".1.3.6.1.2.1.25.3.3.1.2"; #Cpu Processors
    $MIB2 = ".1.3.6.1.2.1.1.3"; #System Uptime
    $MIBIPAdd = ".1.3.6.1.2.1.4.20.1.1";

    $HOST = shift;
    # taken out for 1st code
    #$tracker = shift;

    #while ($tracker == 1)
    {
    print "Computer Name: $HOST\n";
    $count = 0;
    # ($MIB1) && ($HOST) || die "Usage: $0 MIB_OID HOSTNAME";
    (@values) = &snmpwalk("$HOST","$MIB1");
    foreach $value (@values)
        {
        $count++;
    if ($value) {
        $goodvalue = &strip_comment($value);
        print "CPU Usage of Processor $count: $goodvalue%\n"; }
        if ($value > 90){
            print "Warning: CPU Usage over 90%! \n"
        }
    else { warn "No response from host :$HOST:\n"; }
}

(@valuesIP) = &snmpwalk("$HOST","$MIBIPAdd");
$ipaddress = &strip_comment($valuesIP[1]);
print "IP Address: $ipaddress \n";

($value) = &snmpwalk("public\@$HOST","$MIB2");
if ($value) {
    $goodvalue = &strip_comment($value);
    print "System Up Time: $goodvalue\n"; }
else { print "No response from host: $HOST\n"; }

print "\n";
sleep(15);
    }

    sub strip_comment
    {
$theline = shift;

$where = index($theline, ":");

if($where eq -1){
    return $theline;
}

$selectedpart = substr($theline, $where);
$goodpart = substr($selectedpart, 1);


return $goodpart;
}

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

вы должны использовать работу cron, создайте скрипт с фрагментом кода, который вы хотите запускать каждые 15 секунд, затем добавьте задание cron, которое будет планировать запуск скрипта каждые 15 секунд

0 голосов
/ 16 августа 2010

Используйте sleep(15); в вашем цикле.Он будет использовать мало ресурсов, пока не истечет таймер.

0 голосов
/ 16 августа 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...