Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > Запуск скрипта в фоновом режиме


Автор: maykoff 22.11.2006, 12:43
Проблема: нужно выполнить служебный скрипт по событию.
Событие - переход по ссылке на скрипт и его отработка.
1.php:
Код

<?php
require("user.inc");
$valid=new Service_auto();
$msg='';
$valid->confirm($msg);
//где-то здесь необходим запуск 2.php
header("Location:main.php?action=main&msg=".$msg);
?>

в bin`е
.../bin/2.php:
Код

#!/usr/local/bin/php -q
<?php
include('func.php');
loging("run_run_run");
?>


в 1.php нужно запустить 2.php, причём 1.php должен продолжить работу , не дожидаясь каких-либо ответов от 2.php
Права соответствующие установили.
Пробовал варианты типа 
exec("php /var/www/.../bin/2.php"); - не запустил, 
возможно, неправильно составлена команда .
Заранее благодарю за внимание.

Автор: Mal Hack 22.11.2006, 17:14
Через system попробуй. Фоновый процесс запускается с символом &.
А вообще, если надо просто выполнить второй скрипт, то можно его быстренько прописать в auto_append_file

Автор: maykoff 23.11.2006, 10:41
пробовал многое.
листинг запускающего скрипта:
Код

<?php
echo "превед!";
exec("/var/www/....../bin/sending.php > /var/www/f...........a/bin/out.log 2>&1 &");
exit;
?>

описание проблемы:
скрипт запускается и корректно отрабатывает из консоли, но призапуске через веб-интерфейс происходит фигня - при отпущеном выводе (не перенаправляя его директивой > )
- скрипт запускается до тех пор, пока не кончаются ресурсы сервера (при этом не отрабатывая), если же вывод в файл - запускается и виснет...
Если есть сомнения насчёт правильностьи скриптов - так их пока ещё нет, скриптов-то.
Смысл писать , если запустить не получается? Не получается именно запуск на исполнение (точнее, корректное исполнение, потому что сервак вешается моментательно, если вывод не перенаправить )
Уникально ещё и то, что куча  народу утверждает, что скрипт работать должен , и это действительно так, если верить людям и мануалам.
Скорее всего - проблема в разнице окружения при запуске из консоли (SSH, Putty) и через вебинтерфейс, но где конкретно, и как её устранить - я просто теряюсь.

PS. В принципе буду благодарен и за здравую идею, как решить  эту задачу другим способом .
Варианты с хроном не принимаются, как банальные, да к тому же уже и принятые к разработке 

Автор: maykoff 23.11.2006, 18:28
перекомпиллировали php как cli (был cgi), всё заработало.
Подозреваю, что проблема былва именно в окружении - во втором случае, (я до конца не понял) кажется, при запуске, php выстраивает для себя новое окружение.

Автор: alligator 12.12.2006, 18:02
достаточно просто вставить в начало скрипта ignore_user_abort();

Добавлено @ 18:04 
http://ru.php.net/manual/ru/function.ignore-user-abort.php

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)