The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Помогите зазобраться с запуском php скрипта с консоли, !*! mel_sasha, 27-Сен-06, 19:06  [смотреть все]
подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после нажатия на кнопку (например при добавлении новой темы в форуме)
тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже не заметил по времени.
  • Помогите зазобраться с запуском php скрипта с консоли, !*! mummy, 20:43 , 27-Сен-06 (1)
    во FreeBSD есть утилита daemon (man daemon). может она есть и для линукса?

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


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

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

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

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

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

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

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

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


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




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

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