За последние 24 часа нас посетили 38504 программиста и 1284 робота. Сейчас ищут 1055 программистов ...

Бесконечный скрипт. Как сделать?

Тема в разделе "Прочие вопросы по PHP", создана пользователем Carella, 21 дек 2010.

  1. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    Интересует вопрос как сделать php скрипт работающий бесконечно долго.

    Проблема: В настройках пхп ставим макс. время выполнения крипта "0" - неограничено.

    Факт: скрипт отработал около 3 суток потом прекратил свою работу. Почему? Судя по логам, ни сервер ни апач не перезапускался.
     
  2. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    память кончилась
     
  3. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    ничего подобного.
     
  4. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    Каким образом вообще реализован ваш "бесконечный скрипт"?
     
  5. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    while(!file_exists(LDIR_CONF . '/stop.flg')){
    // для отладки использовалось:
    $fp = fopen( LDIR_CONF . '/rttimer.flg', "w" );
    fputs( $fp, time() );
    fclose($fp);
    }
     
  6. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    И каким стал размер открываемого файла? =)
     
  7. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    Всегда стандартный = 10 байт.

    Я же открываю файл на чтение как "w", а он в таком случае открывает "чистый" файл. Если бы я открывал как "а+", вопросов бы не было, размер был бы огого...
     
  8. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    А ну да, ну тогда хз хз =)
     
  9. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    Ай как жаль... Может еще мнения товарищи?
     
  10. name4ef

    name4ef Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Tomsk
    А скрипт каждый раз работает 3-е суток, или опыт проводился единожды?
     
  11. karlozzz

    karlozzz Активный пользователь

    С нами с:
    24 окт 2010
    Сообщения:
    430
    Симпатии:
    0
    Адрес:
    Y-OLA
    Сомневаюсь, что хоть один хостинг такое позволит, тут скорее арендой сервера пахнет
     
  12. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    А тебе точно PHP нужен для этого?
     
  13. RX200

    RX200 Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    56
    Симпатии:
    0
    Не знаю может это поможет, создай .bat файл и впиши в него примерно это:
    Код (Text):
    1.  
    2. @ECHO OFF
    3. :metka
    4. C:\php5\php-cgi.exe -q index.php
    5. goto metka
    index.php это твой скрипт, который бесконечно должен выполнятся.
    Долго, не проверял но должно сработать, в виндовсе.
    я в index.php записал:
    PHP:
    1. <?php
    2. for($i=0;TRUE;$i++)echo $i."\n";
    3. ?>
    пшп считает считает, и когда лимит времени приходит 30с, заново начинает)

    А можно и так:
    PHP:
    1.  
    2. <?php
    3. $x=file_exists('test')?file_get_contents('test'):0;
    4. for($i=0;$i<1000000;$i++)echo ($x++)."\n";
    5. $handle=fopen('test','w');
    6. fwrite($handle,$x);
    7. fclose ($handle);
    8. ?>
    9.  
    И будет считать пока до значения с мантиссой не дойдёт, когда плюс один не всчёт, скрипт продолжится, но инкремента назначемой станет, )
     
  14. LeoK

    LeoK Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    43
    Симпатии:
    0
    ось какая ?
    судя по всему ты пускаеш скрипт в mod_php да? т.е. под апачем?
    поробуй в свой бесконечный цикл вставить хоть какую нибудь паузу с помощью usleep
     
  15. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    процесс апача сдох
     
  16. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    re> А скрипт каждый раз работает 3-е суток, или опыт проводился единожды?

    Дважды. Запустил второй раз, отвалился через часов 10 где-то. Сейчас запустил третий. В работе пока уже 17,5 часов.

    re> Сомневаюсь, что хоть один хостинг такое позволит, тут скорее арендой сервера пахнет

    У меня сервер.


    re> А тебе точно PHP нужен для этого?

    Ну можно конечно на сях написать, но у меня львиная доля обработки уже написана на php, не хотелось бы переписывать.


    re> Не знаю может это поможет, создай .bat... А можно и так: ...

    Вариант не прокатит. Я планирую производить достаточно большую работу с файлами. И необходимым требованием является единство процесса, который может выполнять операции с этими файлами. Аналогично необходимо выполнение также требования когда процесс не имеет права завершиться "от балды", поскольку это вынудит меня к созданию кучи ненужных механизмов по созданию и обслуживании очередей выполнения задачь - что не есть гуд.
    Короче нужен ТОЛЬКО 1 процесс который будет бесконечно крутиться и выполнять определенный набор операций.


    re> ось какая ? судя по всему ты пускаеш скрипт в mod_php да? т.е. под апачем? поробуй в свой бесконечный цикл вставить хоть какую нибудь паузу с помощью usleep

    LAMP. У меня в скрипте стоит sleep(10);


    re> процесс апача сдох

    Реально сам верю в это, других вариантов просто не вижу. Вопрос лишь почему и как быть?????????[/quote]
     
  17. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    Чтобы отсечь все другие вопросы по коду. Вот код:

    [/quote]
     
  18. RX200

    RX200 Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    56
    Симпатии:
    0
    Если проблема в апаче, то можно запустить без апача.
    И второе слышал, что есть программы которые пшп скрипт могут скомпилировать именно, и тогда вообще и от пшп интерпретатора зависеть скрипт перестанет.
     
  19. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    запусти без апача.
    Код (Text):
    1. php myscript.php
    или
    Код (Text):
    1. nohup php myscript.php &
    логи будут в файле nohup.out, скрипт будет выполняться в фоновом режиме.
     
  20. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    У меня управление этим скриптом (запуск / остановка) производится из интерфейса сайта. Я оттуда не смогу выполнить команды типа этих. Либо потеряю в безопасности сервера, если разрешу запуск такого.

    Сегодня вот в который раз однаружил что скрипт отработал 5 day(s), 13 hour(s), 33 minute(s) и опять по непонятной причине вывалился. Печально...
     
  21. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Carella
    запускай кроном. при запуске внутри скрипта проверяй, был ли запущен другой экземпляр. Если был - выходи из текущего.
     
  22. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    почему потеряешь?

    другой мега-вариант. пишешь второй скрипт, который запускаешь вышеприведенными командами. он принимает данные через файл или сокет. в своем скрипте через сайт отправляешь команду, скрипт принимает ее и запускает уже нужный. будут два скрипта - один всё время работает, а другой ты запускаешь/останавливаешь через сайт.
     
  23. RX200

    RX200 Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    56
    Симпатии:
    0
    пшп не предназначен для подобного рода задач, в пшп даже диструктора нет, так как по сути он ненужен, потому что по завершению скрипта итак вся память высвобождается. И фиг знает чего ещё в пшп нет, для такого рода задач.
    При вашей проблеме нужно много данных, например ОС, Апач, как подключён пшп к Апачю, настройки, и того и другого, логи всякие, да и фиг знает чего ещё.
    Я уверен что ваш многодневный скрипт тут ни кто тестить не станет.
    Моё мнение, что ваша задача, при одном процессе(Кстати, создаётся ли процесс при запуске скрипта???), практически, нерешаема.
     
  24. Greg1978

    Greg1978 Активный пользователь

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Вооттт как оно а я ине знал ...
     
  25. Jampire

    Jampire Активный пользователь

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    Напишите демон на пхп и будет он у вас работать пока сама машина в даун не уйдет.