The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Помогите зазобраться с запуском php скрипта с консоли"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"Помогите зазобраться с запуском php скрипта с консоли"  
Сообщение от mel_sasha email(ok) on 27-Сен-06, 19:06 
подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после нажатия на кнопку (например при добавлении новой темы в форуме)
тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже не заметил по времени.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Помогите зазобраться с запуском php скрипта с консоли"  
Сообщение от mummy on 27-Сен-06, 20:43 
во FreeBSD есть утилита daemon (man daemon). может она есть и для линукса?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Помогите зазобраться с запуском php скрипта с консоли"  
Сообщение от mephius email(??) on 27-Сен-06, 20:46 
>подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после
>нажатия на кнопку (например при добавлении новой темы в форуме)
>тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже
>не заметил по времени.


вот так, например:
<?
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, не ждал окончания его работы.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Помогите зазобраться с запуском php скрипта с консоли"  
Сообщение от mel_sasha email(ok) on 28-Сен-06, 11:31 
>>подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после
>>нажатия на кнопку (например при добавлении новой темы в форуме)
>>тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже
>>не заметил по времени.
>
>
>вот так, например:
><?
>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" - это чтобы уже полностю разобраться с этим вопросом и понимать как и что работает

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Помогите зазобраться с запуском php скрипта с консоли"  
Сообщение от mephius email(??) on 28-Сен-06, 12:17 
>>>подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после
>>>нажатия на кнопку (например при добавлении новой темы в форуме)
>>>тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже
>>>не заметил по времени.
>>
>>
>>вот так, например:
>><?
>>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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Помогите зазобраться с запуском php скрипта с консоли"  
Сообщение от mel_sasha email(ok) on 28-Сен-06, 12:57 
>>>>подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после
>>>>нажатия на кнопку (например при добавлении новой темы в форуме)
>>>>тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже
>>>>не заметил по времени.
>>>
>>>
>>>вот так, например:
>>><?
>>>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 только начал учить может я точ-то упустил...

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "Помогите зазобраться с запуском php скрипта с консоли"  
Сообщение от mephius email(??) on 28-Сен-06, 13:06 
>Прочитал, мозги вскепели,
:)
>я так понял что это все работает только под
>Линуксом, акак сделать тоже самое под виндой. Если работает под виндой,
>то где можно почитать о STDOUT и STDERR ? Кроме того
>хочу узнать как Вы узнали что перенаправление потокак в ,truhfeyl идет
>через добавления & ?
>
>Я Php только начал учить может я точ-то упустил...

Насчет амперсанда — опять же читаем man sh, там есть. man sh | grep background . Я просто думал, что уж про амперсанд точно все знают.

Под виндой задача остается та же: отправить процесс в бэкграунд и перенаправить его вывод куда-нибудь в сад. Как это сделать я сейчас сказать не могу — нужно эксперименторовать.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

7. "Помогите зазобраться с запуском php скрипта с консоли"  
Сообщение от mel_sasha email(ok) on 28-Сен-06, 13:10 
>>Прочитал, мозги вскепели,
>:)
>>я так понял что это все работает только под
>>Линуксом, акак сделать тоже самое под виндой. Если работает под виндой,
>>то где можно почитать о STDOUT и STDERR ? Кроме того
>>хочу узнать как Вы узнали что перенаправление потокак в ,truhfeyl идет
>>через добавления & ?
>>
>>Я Php только начал учить может я точ-то упустил...
>
>Насчет амперсанда — опять же читаем man sh, там есть. man sh
>| grep background . Я просто думал, что уж про амперсанд
>точно все знают.
>
>Под виндой задача остается та же: отправить процесс в бэкграунд и перенаправить
>его вывод куда-нибудь в сад. Как это сделать я сейчас сказать
>не могу — нужно эксперименторовать.


Огромное спасибо за детальны разбор, но у меня остался последний вопрос, что такое  man sh, чтотакое ман понятно, а что такое SH ? еще раз извениете, если вопросы глупые

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

8. "Помогите зазобраться с запуском php скрипта с консоли"  
Сообщение от mephius email(??) on 28-Сен-06, 13:21 
>Огромное спасибо за детальны разбор, но у меня остался последний вопрос, что
>такое  man sh, чтотакое ман понятно, а что такое SH
>? еще раз извениете, если вопросы глупые


sh, jsh - standard and job control shell and command  interpreter, если проще — стандартный командный интерпретатор.

а вот, собственно, и сам ман: https://www.opennet.ru/man.shtml?topic=sh&russian=0&category=&submit=%F0%CF%CB%C1%DA%C1%D4%D8+man

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру