Запуск php скриптов на сервере pfSense



  • Приветствую!
    Есть задача, мониторить все и вся :)
    Конкретно сейчас есть задача мониторить состояние шлюзов, потери и т.п. Чтобы не изобретать велосипед, хотел в консоли запустить скрипт (например /usr/local/www/widgets/widgets/gateways.widget.php), но вот не задача, не работает. Попробовал его видоизменить до такого состояния:

    
    $nocsrf = true;
    //require_once("/usr/local/www/guiconfig.inc");
    require_once("/etc/inc/pfsense-utils.inc");
    require_once("/etc/inc/functions.inc");
    $a_gateways = return_gateways_array();
    $gateways_status = array();
    $gateways_status = return_gateways_status(true);
    $counter = 1;
    foreach ($a_gateways as $gname => $gateway) {
    echo $gateway['name'];
    if (is_ipaddr($gateway['gateway']))
                                    echo $gateway['gateway'];
                            else
                                    echo get_interface_gateway($gateway['friendlyiface']);
    if ($gateways_status[$gname])
                                    echo $gateways_status[$gname]['delay'];
                            else
                                    echo "Gathering data";
    if ($gateways_status[$gname])
                                    echo $gateways_status[$gname]['loss'];
                            else
                                    echo "Gathering data";
    if ($gateways_status[$gname]) {
                                    if (stristr($gateways_status[$gname]['status'], "down")) {
                                            $online = "Offline";
                                    } elseif (stristr($gateways_status[$gname]['status'], "loss")) {
                                            $online = "Warning, Packetloss";
                                    } elseif (stristr($gateways_status[$gname]['status'], "delay")) {
                                            $online = "Warning, Latency";
                                    } elseif ($gateways_status[$gname]['status'] == "none") {
                                            $online = "Online";
                                    }
                            } else {
                                    $online = "Gathering data";
                            }
    echo "$online";
    $counter++;
    }
    ?>
    
    

    Но и тут засада. Ошибками закидывает. Причем если бы были ошибки синтаксиса-проблем небыло-бы.
    Кто-нибудь может подсказать, как это дело провернуть? :)



  • #!/usr/bin/php -f
    var_dump($argv);
    ?>
    


  • Сделал так:

    
    #!/usr/local/bin/php -f
    var_dump($argv);
    $nocsrf = true;
    //require_once("/usr/local/www/guiconfig.inc");
    require_once("/etc/inc/pfsense-utils.inc");
    require_once("/etc/inc/functions.inc");
    $a_gateways = return_gateways_array();
    $gateways_status = array();
    $gateways_status = return_gateways_status(true);
    $counter = 1;
    foreach ($a_gateways as $gname => $gateway) {
    echo $gateway['name'];
    if (is_ipaddr($gateway['gateway']))
                                    echo $gateway['gateway'];
                            else
                                    echo get_interface_gateway($gateway['friendlyiface']);
    if ($gateways_status[$gname])
                                    echo $gateways_status[$gname]['delay'];
                            else
                                    echo "Gathering data";
    if ($gateways_status[$gname])
                                    echo $gateways_status[$gname]['loss'];
                            else
                                    echo "Gathering data";
    if ($gateways_status[$gname]) {
                                    if (stristr($gateways_status[$gname]['status'], "down")) {
                                            $online = "Offline";
                                    } elseif (stristr($gateways_status[$gname]['status'], "loss")) {
                                            $online = "Warning, Packetloss";
                                    } elseif (stristr($gateways_status[$gname]['status'], "delay")) {
                                            $online = "Warning, Latency";
                                    } elseif ($gateways_status[$gname]['status'] == "none") {
                                            $online = "Online";
                                    }
                            } else {
                                    $online = "Gathering data";
                            }
    echo "$online";
    $counter++;
    }
    ?>
    
    

    результат тот-же:

    array(1) {
      [0]=>
      string(10) "./test.php"
    }

    Fatal error: Call to undefined function get_configured_interface_with_descr() in /etc/inc/gwlb.inc on line 341



  • При запуске без var_dump($argv);
    вот этого:

    array(1) {
    
        =>
    
      string(10) "./test.php"
    }
    

    небыло



  • Не в Var_dump счастье. В начале (1 строка)  консольного php скрипта должно стоять '#!/usr/local/bin/php -f '. Вардамп был для примера.



  • Это-то я понимаю…
    этой строчки небыло раньше. т.к. я запускал скрипт так: php test.php.
    Добавление данной строчки, никакого результата не дало, кроме как появилась возможность запускать так: ./test.php

    Все горе то (как мне кажется) в этом:
    Fatal error: Call to undefined function get_configured_interface_with_descr() in /etc/inc/gwlb.inc on line 341

    Но  в веб интерфейсе-то он работает.. :(



  • @a.kozlov:

    Это-то я понимаю…
    этой строчки небыло раньше. т.к. я запускал скрипт так: php test.php.
    Добавление данной строчки, никакого результата не дало, кроме как появилась возможность запускать так: ./test.php

    Все горе то (как мне кажется) в этом:
    Fatal error: Call to undefined function get_configured_interface_with_descr() in /etc/inc/gwlb.inc on line 341

    Но  в веб интерфейсе-то он работает.. :(

    1 Да, верхняя строчка для запуска просто файла.
    2 Нужно найти где декларируется недостающая функция и выполнить include. В веб-интерфейсе возможно что-то автоматически подключается. Файлы лежат в /etc/inc



  • В общем так..
    если найдутся психи, под стать мне, решившие в консоли выдергивать данный, аналогичные тем, что висят в веб интерфейсе, знайте, что действительно необходимо подключать файлы из /etc/inc/.
    В моем случае это:
    /etc/inc/globals.inc
    /etc/inc/config.inc
    /etc/inc/util.inc
    /etc/inc/pfsense-utils.inc
    /etc/inc/functions.inc


Locked