Многопоточность:

Тема в разделе "PHP программирование", создана пользователем maykoff, 22 ноя 2006.

  1. maykoff

    maykoff Гость

    Проблема:
    При обращении к скрипту должно выполняться два действия - вывод (фактически - страничка) и некоторое служебное действие, достаточно протяжённое по времени.
    Вывод странички - с помощью smarty.
    Заставить пользователя ждать , пока выполнится служебная часть скрипта - некрасиво(время - минуты или даже часы ), да и вывода никакого она на несёт.
    Вижу вариант - заапускать служебный скрипт в /bin/ из этого скрипта.
    Причём запущенный скрипт должен продолжать работать после завершения запустившего его скрипта столько, сколько потребуется.
    Данные для запуска - один int(~10знаков)
    У кого есть какие соображения на этот счёт?
    Про вариант с Cron`ом помню, но не хотелось бы.
    Заранее благодарен за внимание.
     
  2. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    может я чего-то не так понимаю, но такую задачку попробовал бы делать через exec

    from Help exec()

    Note: If you start a program using this function and want to leave it running in the background, you have to make sure that the output of that program is redirected to a file or some other output stream or else PHP will hang until the execution of the program ends.
     
  3. maykoff

    maykoff Гость

    скорее, это я не совсем точно описал проблему
    скрипт:
    Код (Text):
    #!/var/www/............./cgi-bin/php -q
    <?php
    include('/var/www/........../bin/func.php');
    loging("runrunrun");
    exit;
    ?>
    не запускается директивой
    Код (Text):
    <?php
    echo "превед!";
    exec("/var/www/....../bin/sending.php > /var/www/f...........a/bin/out.log 2>&1 &");
    exit;
    ?>
    при этом изначально запускалось огромное количество процессов, хотя в логах апача виден был только один.
    грешили на виртуальность разборщика php, дали ему свой личный разборщик и убрали из патча линки (дали прямой путь)
    все права и ownerы , естественно, соответствуют
    скрипт не запускается
    что делать - прямо не знаю.
     
  4. maykoff

    maykoff Гость

    Сейчас скрипт запускается, но виснет смертельно, приходится руками killить
    Возможно, дело в каких-то специфических настройках апача или php?
    был бы очень благодарен за описание настроек апача и phpinfo тех, у кого такая директива отрабатывает корректно (простите за наглость)

    при этом скрипт не отрабатывает, вывод в out.log появляется
    Ещё момент: при запуске из командной строки первого (запускающего) скрипта всё происходит в наилучшем виде, запускаемый скрипт отрабатывает корректно

    при этом скрипт не отрабатывает, вывод в out.log появляется
    Ещё момент: при запуске из командной строки первого (запускающего) скрипта всё происходит в наилучшем виде, запускаемый скрипт отрабатывает корректно
     
  5. Gisma

    Gisma Гость

    Эта функция работает, если не срабатывает, то спешу тебя обрадовать у тебя ошибки в скрипте :)
    я как человек который не раз е$ался c CLI могу утверждать точно;_)
     
  6. maykoff

    maykoff Гость

    простите, а в чём разница? поменяли имя файла вывода?
    мы это пробовали - кучу имён перебрали :) - не помогло...
    скрипт запускается и корректно отрабатывает из консоли, но призапуске через веб-интерфейс происходит фигня - при отпущеном выводе (не перенаправляя его директивой > )
    - скрипт запускается до тех пор, пока не кончаются ресурсы сервера (при этом не отрабатывая), если же вывод в файл - запускается и виснет...
    а насчёт неправильностьи скриптов - так их пока ещё нет, скриптов-то.
    Смысл писать , если запустить не получается?
    листинг скриптов я привёл - это практическти полный листинг, только домен попросили вырезать, чтоб не позориться (стадо умников с полными правами не могут скрипт запустить).
    Если интересно - вот ещё листинг func.php из инклюдов :)
    Код (Text):
    <?php
    function loging($str)//запись хода выполнения скрипта
    {
    //$str=convert_cyr_string($str,"w","k"); //логинг в koi-8
    set_magic_quotes_runtime(0);
    $fl=@fopen('content.log','a');
    @fwrite($fl,$str."\r\n");
    @fclose($fl);
    set_magic_quotes_runtime(1);
    }
    ?>
     
  7. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    тестанул пару раз - все работет ... пользовался exec

    сначала ping комаду перенаправил в файл, а потом результаты работы скрипта который просто выводит текст командой echo ... во втором случае нужно было знать сиситеме где находиться php.exe
     
  8. Gisma

    Gisma Гость

    я имел ввиду что проблемы в запускающем скрипте :ph34r:
    поступайте как и все последовательно:
    1. проверте, что exec работат (пусть выполнит команду ls)
    2. проверте, работу перенаправления вывода
    3. запускайте пхп скрипт
    и т.д.
     
  9. maykoff

    maykoff Гость

    exec при запуске через веб не работает (см выше).
    В том-то и проблема, включить поддержку exec мы не можем (мы её не отключали :ph34r:)
    Exec работает, команда ls выполняется.
    Всё хорошо.
    Проблемы (см.выше) возникают, когда пытаюсь (!)через веб-интерфейс из одной пхп-шки запустить другую(!).
    При той же операции из консоли всё отрабатываент в наилучшем виде.
    Вывод пишется, куда ему и предначертано, скрипт работает.
    Murtas, я не сомневаюсь, что у вас скрипт работал. Проблема в том, что он не работает у нас.
    Практическую актуальность проблема уже потеряла ( служебный скрипт цепляю на хрон, а может отдельным демоном будет, ещё не полностью определился). Но интересно узнать - что ж это за фигня такая. Подозреваю, что дело в каких-то специфических настройках сервера или интерпретатора.
    Но в каких, и где искать - просто теряюсь.
     
  10. Gisma

    Gisma Гость

    если я бы не сталкивался с подобной проблемой, то я бы ничего не говорил :ph34r:
     
  11. maykoff

    maykoff Гость

    замечательно, тогда по прядку:
    exec работает;
    перенаправление в указанный файл происходит;
    при запуске - фигня получается.
    итд - второй день уже, не знаю уже, куда бы ещё ткнуться.
    Возможно, проблема в разном окружении, но где именно - чёрт его знает .
    Понятия не имею, где рыться
     
  12. Gisma

    Gisma Гость

    проблемы могут вылезти откуда угодно :ph34r: различия вызова пхп программы из-под консоли и из веба значительны (хотя бы переменные ENV и SERVER) поэтому я в свое время комментил все строки и сначала довел до работы простейший скрипт, а уж потом подключал библиотеки и ядра и т.д. и т.п.
     
  13. maykoff

    maykoff Гость

     
  14. Gisma

    Gisma Гость

    бубен в руки :-D
     
  15. maykoff

    maykoff Гость

    только и остаётся что бубен. Остальные варианты, похоже, я исчерпал.
    Пенрвый скрипт чудово всё выводит, как из консоли, так и из веба.
    От второго добиться вывода так и не удалось.
    Пытается запуститься, висит какое-то время, падает, сногва пытается запуститься, и так, пока его не kill



    при этом в логах апача попытка запуска регистрируется единожды, а насамом деле он пытается запуститься неоднократно
     
  16. maykoff

    maykoff Гость

    Поздравьте, бубен помог, спасибо!
    перекомпиллировали php как cli (был cgi), всё заработало.
    Подозреваю, что проблема былва именно в окружении - во втором случае, (я до конца не понял) кажется, при запуске, php выстраивает для себя новое окружение.
     
  17. Gisma

    Gisma Гость

Загрузка...
Похожие Темы - Многопоточность
  1. 123456789igor
    Ответов:
    0
    Просмотров:
    913
  2. Vadik(R)
    Ответов:
    1
    Просмотров:
    1.403
  3. sanch
    Ответов:
    2
    Просмотров:
    3.065

Поделиться этой страницей