подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после нажатия на кнопку (например при добавлении новой темы в форуме)
тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже не заметил по времени.
во FreeBSD есть утилита daemon (man daemon). может она есть и для линукса?
>подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после
>нажатия на кнопку (например при добавлении новой темы в форуме)
>тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже
>не заметил по времени.
вот так, например:
<?
passthru("(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1");
?>можно так же в script.php вписать интерпретатор в начало:
#!/path/to/php
<?
//script here
?>тогда можно будет сделать вот так:
<?
passthru("(/path/to/script.php & ) >> /dev/null 2>&1");
?>Перенаправление вывода нужно для того, чтобы скрипт, запустивший passthru, не ждал окончания его работы.
>>подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после
>>нажатия на кнопку (например при добавлении новой темы в форуме)
>>тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже
>>не заметил по времени.
>
>
>вот так, например:
><?
>passthru("(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1");
>?>
>
>можно так же в script.php вписать интерпретатор в начало:
>
>#!/path/to/php
><?
>//script here
>?>
>
>тогда можно будет сделать вот так:
><?
>passthru("(/path/to/script.php & ) >> /dev/null 2>&1");
>?>
>
>Перенаправление вывода нужно для того, чтобы скрипт, запустивший passthru, не ждал окончания
>его работы.
Я извеняюсь за возможно глупый вопрос, но что значит в срочке passthru("(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1");"-f" и ">> /dev/null 2>&1" - это чтобы уже полностю разобраться с этим вопросом и понимать как и что работает
>>>подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после
>>>нажатия на кнопку (например при добавлении новой темы в форуме)
>>>тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже
>>>не заметил по времени.
>>
>>
>>вот так, например:
>><?
>>passthru("(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1");
>>?>
>>
>>можно так же в script.php вписать интерпретатор в начало:
>>
>>#!/path/to/php
>><?
>>//script here
>>?>
>>
>>тогда можно будет сделать вот так:
>><?
>>passthru("(/path/to/script.php & ) >> /dev/null 2>&1");
>>?>
>>
>>Перенаправление вывода нужно для того, чтобы скрипт, запустивший passthru, не ждал окончания
>>его работы.
>
>
>Я извеняюсь за возможно глупый вопрос, но что значит в срочке passthru("(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1");
>
>"-f" и ">> /dev/null 2>&1" - это чтобы уже полностю разобраться с этим вопросом и понимать как и что работаетOk.
читаем про passthru: http://www.php.net/manual/en/function.passthru.php
видим, что passthru выполняет заданную в параметрах системную команду.
смотрим, как из консоли запустить на выполнение php скрипт:
смотрим man php , видим такую строчку
php [options] [ −f ] file [[−−] args...]что означает, что если нужно выполнить php скрипт, то запускать нужно вот так:
#/path/to/php -f /path/to/script.phpЭто было насчет "-f". Надеюсь, что ответил на первую половину вопроса.
Дальше. Определились, что будем выполнять вот такую команду: /path/to/php -f /path/to/script.php
Дальше. Читаем ман по passthru: http://www.php.net/manual/en/function.passthru.php
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.
Что в кратце означает, что passthru не будет ждать окончания выполнения, если отправить процесс в бэкграунд и вывод этого процесса перенаправлен в файл или поток.В бэкграунд выполнение скрипта можно отправить добавлением амперсанда в конце: /path/to/php -f /path/to/script.php &
Кроме того, нам еще нужно перенаправить вывод. Читаем man sh секцию REDIRECTION (не буду ее здесь приводить) и приходим к такуму решению:
перенаправим STDOUT и STDERR в /dev/null, так как на совсем не интересно, что там выводит этот, запускаемый в бэкграунде, скрипт. Получаем:
(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1
Если вывод все-таки интересен, то можно перенаправлял вывод в какой-нить файл:
(/path/to/php -f /path/to/script.php & ) >> /path/to/script.log 2>&1
Таким образом ">> /dev/null 2>&1" означает перенаправление STDOUT и STDERR в /dev/null
>>>>подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после
>>>>нажатия на кнопку (например при добавлении новой темы в форуме)
>>>>тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже
>>>>не заметил по времени.
>>>
>>>
>>>вот так, например:
>>><?
>>>passthru("(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1");
>>>?>
>>>
>>>можно так же в script.php вписать интерпретатор в начало:
>>>
>>>#!/path/to/php
>>><?
>>>//script here
>>>?>
>>>
>>>тогда можно будет сделать вот так:
>>><?
>>>passthru("(/path/to/script.php & ) >> /dev/null 2>&1");
>>>?>
>>>
>>>Перенаправление вывода нужно для того, чтобы скрипт, запустивший passthru, не ждал окончания
>>>его работы.
>>
>>
>>Я извеняюсь за возможно глупый вопрос, но что значит в срочке passthru("(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1");
>>
>>"-f" и ">> /dev/null 2>&1" - это чтобы уже полностю разобраться с этим вопросом и понимать как и что работает
>
>Ok.
>
>читаем про passthru: http://www.php.net/manual/en/function.passthru.php
>
>видим, что passthru выполняет заданную в параметрах системную команду.
>
>смотрим, как из консоли запустить на выполнение php скрипт:
>
>смотрим man php , видим такую строчку
>php [options] [ −f ] file [[−−] args...]
>
>что означает, что если нужно выполнить php скрипт, то запускать нужно вот
>так:
>#/path/to/php -f /path/to/script.php
>
>Это было насчет "-f". Надеюсь, что ответил на первую половину вопроса.
>
>Дальше. Определились, что будем выполнять вот такую команду: /path/to/php -f /path/to/script.php
>
>Дальше. Читаем ман по passthru: http://www.php.net/manual/en/function.passthru.php
>
>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.
>
>
>Что в кратце означает, что passthru не будет ждать окончания выполнения, если
>отправить процесс в бэкграунд и вывод этого процесса перенаправлен в файл
>или поток.
>
>В бэкграунд выполнение скрипта можно отправить добавлением амперсанда в конце: /path/to/php -f
>/path/to/script.php &
>
>Кроме того, нам еще нужно перенаправить вывод. Читаем man sh секцию REDIRECTION
>(не буду ее здесь приводить) и приходим к такуму решению:
>
>перенаправим STDOUT и STDERR в /dev/null, так как на совсем не интересно,
>что там выводит этот, запускаемый в бэкграунде, скрипт. Получаем:
>
>(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1
>
>Если вывод все-таки интересен, то можно перенаправлял вывод в какой-нить файл:
>
>(/path/to/php -f /path/to/script.php & ) >> /path/to/script.log 2>&1
>
>Таким образом ">> /dev/null 2>&1" означает перенаправление STDOUT и STDERR в /dev/null
Прочитал, мозги вскепели, я так понял что это все работает только под Линуксом, акак сделать тоже самое под виндой. Если работает под виндой, то где можно почитать о STDOUT и STDERR ? Кроме того хочу узнать как Вы узнали что перенаправление потокак в ,truhfeyl идет через добавления & ?Я Php только начал учить может я точ-то упустил...
>Прочитал, мозги вскепели,
:)
>я так понял что это все работает только под
>Линуксом, акак сделать тоже самое под виндой. Если работает под виндой,
>то где можно почитать о STDOUT и STDERR ? Кроме того
>хочу узнать как Вы узнали что перенаправление потокак в ,truhfeyl идет
>через добавления & ?
>
>Я Php только начал учить может я точ-то упустил...Насчет амперсанда — опять же читаем man sh, там есть. man sh | grep background . Я просто думал, что уж про амперсанд точно все знают.
Под виндой задача остается та же: отправить процесс в бэкграунд и перенаправить его вывод куда-нибудь в сад. Как это сделать я сейчас сказать не могу — нужно эксперименторовать.
>>Прочитал, мозги вскепели,
>:)
>>я так понял что это все работает только под
>>Линуксом, акак сделать тоже самое под виндой. Если работает под виндой,
>>то где можно почитать о STDOUT и STDERR ? Кроме того
>>хочу узнать как Вы узнали что перенаправление потокак в ,truhfeyl идет
>>через добавления & ?
>>
>>Я Php только начал учить может я точ-то упустил...
>
>Насчет амперсанда — опять же читаем man sh, там есть. man sh
>| grep background . Я просто думал, что уж про амперсанд
>точно все знают.
>
>Под виндой задача остается та же: отправить процесс в бэкграунд и перенаправить
>его вывод куда-нибудь в сад. Как это сделать я сейчас сказать
>не могу — нужно эксперименторовать.
Огромное спасибо за детальны разбор, но у меня остался последний вопрос, что такое man sh, чтотакое ман понятно, а что такое SH ? еще раз извениете, если вопросы глупые
>Огромное спасибо за детальны разбор, но у меня остался последний вопрос, что
>такое man sh, чтотакое ман понятно, а что такое SH
>? еще раз извениете, если вопросы глупые
sh, jsh - standard and job control shell and command interpreter, если проще — стандартный командный интерпретатор.а вот, собственно, и сам ман: http://www.opennet.me/man.shtml?topic=sh&russian=0&category=...