Страница 1 из 1

Помогите разобраться с cycle_свойцикл.php

Добавлено: Пт фев 28, 2014 9:30 am
dimik
Помогите разобраться с такой проблемой:
Есть скрипт: cycle_server.php лежит естественно в папке scripts.
Так вот если его вручную запустить: http://localhost/scripts/cycle_server.php то он отрабатывает.
А вот почему он как цикл не запускается периодически? Что с ним сделать чтобы он как цикл работал? Более того, если посмотреть start.bat то его даже в списке нет!

Re: Помогите разобраться с cycle_свойцикл.php

Добавлено: Пт фев 28, 2014 9:57 am
sergejey
Делать в принципе ничего не нужно. Если он сделан по "образу и подобию" других скриптов cycle_*, то он запустится сам собой при перезапуске системы, т.к. основной цикл cycle.php как раз запускает всё, что лежит в папке /scripts/ и начинается на cycle_*

Re: Помогите разобраться с cycle_свойцикл.php

Добавлено: Пт фев 28, 2014 2:08 pm
dimik
Да, сделан по образу sample.php, заметил только что в примере нет строчки
chdir(dirname(__FILE__).'/../');
добавил ее и скрипт стал отрабатывать при ручном запуске.
вот код:

Код: Выделить всё

<?php
/*
* @version 0.2 (auto-set)
*/

chdir(dirname(__FILE__).'/../');

include_once("./config.php");
include_once("./lib/loader.php");

// connecting to database
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME); 
 
include_once("./load_settings.php");


function searchJson($obj, $valut, $direct)
{foreach($obj->Children as $child)
    {   
       if(isset($child->id) && $child->id == $valut)
           {
                $sensorvalue = $child->Value;
                sg($direct,$sensorvalue);
                          }
   searchJson($child,$valut,$direct);
    }
return;
}

$ch = curl_init('http://localhost:8085/data.json');                                                                     
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$ohm = curl_exec($ch);
$json = json_decode($ohm);
searchJson($json,'31','ThisComputer.CPUtemp');
searchJson($json,'33','ThisComputer.CPUload');


// closing database connection
$db->Disconnect(); 

?>
если в браузере отдельно запустить cycle.php то в списке cycle_server.php присутствует.
В чем может быть проблема? Почему ThisComputer.CPUtemp и ThisComputer.CPUload не обновляются?

Re: Помогите разобраться с cycle_свойцикл.php

Добавлено: Пт фев 28, 2014 2:40 pm
sergejey
Всё-таки не совсем по образу и подобию, т.е. по подобию sample.php, но не cycle_*.php.
Цикл должен внутри себя работать, а по коду получается, что он один раз запускается и всё -- смотрите другие циклы как устроены.

Re: Помогите разобраться с cycle_свойцикл.php

Добавлено: Пт фев 28, 2014 3:00 pm
dimik
А разве start.bat не занимается тем, что постоянно запускает cycle.php? А тот в свою очередь запускает все cycle_*.php из папки scripts?

Re: Помогите разобраться с cycle_свойцикл.php

Добавлено: Пт фев 28, 2014 3:31 pm
sergejey
dimik писал(а):А разве start.bat не занимается тем, что постоянно запускает cycle.php? А тот в свою очередь запускает все cycle_*.php из папки scripts?
Нет, start.bat один раз запускает cycle.php, а тот распралеливается и один раз запускает все cycle_*.php

Re: Помогите разобраться с cycle_свойцикл.php

Добавлено: Пт фев 28, 2014 3:34 pm
dimik
В общем сделал сам скрипт циклическим и все заработало.
Спасибо за наводку.

Re: Помогите разобраться с cycle_свойцикл.php

Добавлено: Вс мар 23, 2014 6:49 pm
krasnov
Пишу свой цикл. После запуска сразу закрывается. Писал по образу существующих.

Код: Выделить всё

19:06:27 DEBUG [root]: Starting ./scripts/cycle_arduino.php ...  (at /var/www/home/lib/general.class.php:390) 
...
19:06:28 DEBUG [root]: Closing thread: php -q ./scripts/cycle_arduino.php --params "a:0:{}" (at /var/www/home/lib/general.class.php:390)
Код цикла:

Код: Выделить всё

<?php 
chdir(dirname(__FILE__).'/../');

//include_once("./config.php");
//include_once("./lib/loader.php");
//include_once("./lib/threads.php");

set_time_limit(0);

$rv = exec("stty -F /dev/ttyACM0 min 0 time 0 -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke");

include_once("./scripts/php_serial.class.php");
$serial = new phpSerial;
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();
while(1) 
{
    echo date("H:i:s") . " running " . basename(__FILE__) . "\n";
    if (!$updated_time || (time() - $updated_time) > 1 * 60 * 60) 
    {
//        DebMes("Cycle running OK: ".basename(__FILE__));
        $updated_time=time();
    }
//    setGlobal((str_replace('.php', '', basename(__FILE__))).'Run', time());

    $data = $serial->readPort();
    if ($data<>"") 
    {
        $readArray = explode(";",$data);
        foreach($readArray as $read)
        {    
            if ($read<>"")
            {
                list($sensor,$param,$comment,$value) = explode("#",$read);
                  if ($sensor==1)
                {
                    $sensorName = "firstTHSensor";
                    $method = "dataChanged";
                    if ($param==1)
                    {
                        $t = $value;
                    }
                    else if ($param==2)
                    {
                        $h = $value;
                    }
                }
            }
        }

        if ($sensorName<>"" && $method <>"" && $t <> "" && $h <> "")
        {
            file_get_contents('http://192.168.1.185/home/objects/?object='.$sensorName.'&op=m&m='.$method.'&t='.$t.'&h='.$h);
        }
     }

    if (file_exists('./reboot')) 
    {
        exit;
    }

    sleep(1); //Задержка 1 секунда
}

//DebMes("Unexpected close of cycle: " . basename(__FILE__));
?>
Методом проб и ошибок удалось выяснить что если закомментировать вызовы setGlobal и DebMes то цикл работает.
Поправил файлы /etc/php5/apache2/php.ini, /etc/php5/cli/php.ini раскомментировал строку error_log = syslog
После перезапуска увидел ошибку в /var/log/syslog

Код: Выделить всё

Mar 23 19:40:50 nas php: PHP Fatal error:  Call to undefined function setGlobal() in /var/www/home/scripts/cycle_arduino.php on line 29
Подскажите, что нужно поправить чтобы методы виделись?