запуск php скрипта через cron

Тема в разделе "Как сделать...", создана пользователем sympler, 10 июн 2010.

Статус темы:
Закрыта.
  1. sympler

    sympler Постоялец

    Регистр.:
    24 окт 2008
    Сообщения:
    131
    Симпатии:
    6
    необходимо запускать php скрипт через крон, но проблема в том что скрипт очень большой, в смысле ему выполняться долго (может час, может два) Собственно вопрос может ли он зависнуть или выдать ошибку? кто сталкивался с таким? то тогда как его перезапустить?

    например: мой скрипт проверяет на моих сайтах тайтлы на соответсвие, и например на одном из них хостинг сглючил или сглючил хостинг где находится скрипт, запускаемый кроном, в таком случае мой скрипт до конца не выплонится, собственно что делать?

    как вариант проверять что было уже сделано и начинать с где остановились, а скрипт запускать каждый час например ))
     
  2. komyak

    komyak

    Регистр.:
    4 фев 2009
    Сообщения:
    487
    Симпатии:
    187
    Если стоит ограничение на выполнение.

    Сами ответили =)) Оптимально создавать файл лога, где отмечать на каком этапе идёт выполнение.

    Из всего этого, при условии что есть таймлимит, запускать ~10 задач, после этого отключаться и ставить запись об этом, потом опят кроном запускать.
    ХЗ, вижу это самым оптимальным.
     
    sympler нравится это.
  3. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    разбей скрипт на два. в первом управление, во втором обработка данных.

    т.е. грубо говоря в первом идет цикл перебора по сайтам, а во втором сама функция ретрива и парсинга. вызывай второй скрипт из первого как из командной строки: при помощи exec или system, при этом если и будет отваливаться обработка, то только во втором скрипте, а управляющий скрипт будет работать дальше. ну и логи ессно пиши какой сайт удалось обработать а какой надо поставить в очередь на следующий раз.
     
    sympler нравится это.
  4. sympler

    sympler Постоялец

    Регистр.:
    24 окт 2008
    Сообщения:
    131
    Симпатии:
    6
    думаю что set_time_limit(0); не помощет если файл запустить на час, хотя кто знает ))

    надо будет попробовать, хотя эти функции запускают скрипт2 в фоновом режиме, а первому скипту в это время в цикле крутиться и все время запускать второй скрипт или как?

    например:

    while ( $i < количество сайтов) {

    if (метки нет) { exec(скрипт 2:( }
    else {$i++;}

    }
     
  5. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    Если свой сервер или вдс, то поможет. У меня как-то раз парсер 4-5 суток работал, пока не отпарсил всё что надо.
     
  6. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    насколько я понимаю, они хоть и в фоне, но первый скрипт будет ждать результата выполнения, либо FALSE (http://ru2.php.net/manual/en/function.system.php) поэтому как то так:

    PHP:
    while ( $i количество сайтов) {
    if (
    метки нет) { $result system(скрипт 2);
    if (
    $result
    {
    второй скрипт отработал
    } else
    {
    второй скрипт не отработал
    }
    }
    else {
    $i++;}
    }
    $result будет содержать данные из буфера. поэтому можешь во втором скрипте ошибки выводить прямо через echo, а потом в result их получать.
     
  7. sympler

    sympler Постоялец

    Регистр.:
    24 окт 2008
    Сообщения:
    131
    Симпатии:
    6
    будем тестировать, логически все правильно)) что на практике получится... посмотрим...
     
Статус темы:
Закрыта.