ФорумПрограммированиеPHP для идиотов → Создание cron скрипта

Создание cron скрипта

  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 10 июля 2009 г. 2:32

    Всем привет. Передо мной стала задача сделать скрипт который бы автоматически делал нужные мне задачи. Т.к. практики в этой области у меня нет, прошу помощи от вас. Собственно нужно, чтобы скрипт при первом запуске брал первый элемент массива, хешировал его в md5 и как-нить запоминал сам факт того, что с этим элементом массива он работал уже. Далее при втором запуске, скрипт проверял сколько времени прошло с момента его работы с первым элементом массива и если прошло менее 6-ти часов, он пропускает первый элемент массива и начинает работать со вторым и так далее до окончания массива. После окончания массива, скрипт снова ж таки проверял сколько прошло времени с момента его работы с первым массивом, и если прошло более 6-ти часов, он начинал работать с первым элементом. Сам же скрипт я хочу поставить на cron с интервалом запуска 20-30 минут.

    З.Ы. Гугление, как и поиск на этом форуме, вразумительных результатов не дало :(
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 10 июля 2009 г. 2:38, спустя 6 минут 17 секунд

    отлично
    задачу надо разбить на логические этапы
    1. как задание в crontab ставить умеем?
    2. как в скрипте хешировать первый элемент массива умеем?
    3. как запомнить факт работы с этим элементом массива мы умеем? (записать в файл, базу)
    все умрут, а я изумруд
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 10 июля 2009 г. 3:04, спустя 25 минут 50 секунд

    md5, первые 2 пункта умеем, а вот с последним небольшие проблемы..
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 10 июля 2009 г. 3:11, спустя 7 минут 31 секунду

    felix90, какие проблемы?
    запиши в файл рядом со скриптом индекс элемента массива, с которым ты уже работал
    все умрут, а я изумруд
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 10 июля 2009 г. 3:14, спустя 2 минуты 35 секунд

    В файл данные записать смогу (к примеру при помощи класса дуда), а вот как делать поиск по этому файлу того или иного элемента массива и как ставить условие при поиске относительно времени (6-ти часовой интервал) - вот с этим проблемка..
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 10 июля 2009 г. 3:27, спустя 13 минут 6 секунд

    какого класса дуда?
    [man]file_put_contents[/man]

    что это за массив и что за временной интервал? зачем это вобще нужно?
    все умрут, а я изумруд
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 10 июля 2009 г. 3:38, спустя 11 минут 9 секунд

    http://pyha.ru/forum/topic/2387.0

    В общем я написал скрипт, который парсит достаточно много страниц из стороннего сайта. Проблема в том, что этот сторонний сайт, а точнее его сервер в целом, банит ip моего сервера думая, что это ддос атака. Вот именно для этого я решил написать так сказать бота, который каждые 6 часов будет автоматически парсить страницы того сайта и сохранять результаты в файлы. Сам массив имеет вид:

    $scan = array ("6542","7630","5065","4807","6141","6355","7080","3939","4557","2139");


    Вот мне нужно подставлять каждый элемент этого массива по очереди в некую функцию Get и сохранять результат при помощи функции save.

    То есть пример:

    for ($i=0;$i<sizeof($scan);$i++){
    $a = Get($curl,$scan[$i]);
    save($scan[$i].'_work',$a);
    }
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 10 июля 2009 г. 4:34, спустя 56 минут 25 секунд

    DudeFile и DudeFileIterator )))
    Дуд, сделай человеку DudeCron )
    adw/0
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 10 июля 2009 г. 4:44, спустя 9 минут 51 секунду

    Поддерживаю))
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 10 июля 2009 г. 6:52, спустя 2 часа 7 минут 45 секунд

    Запускать каждые 6 часов :-)
    $scan=(1123,3123,42334,56346,476457);//Это Вы лучше меня знаете .. что оно означает 
    $n = read_param_from_file();
    //если таблица закончилась, то идём по второму кругу
    if($n >= count($scan)){
     $n = 0;
    }
    $content = Get($curl,$scan[$n]);
    save_content_to_file($scan[$n].'_work',$content);
    //Сдвигаемся на следующий элемент таблицы
    $n++;
    save_param_to_file($n); // Запоминаем .. что будем смотреть при следующем запуске
    }
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 10 июля 2009 г. 7:45, спустя 52 минуты 50 секунд

    AndryG, спасибо конечно, но такое я и сам мог замутить. Мне нужно, чтобы была сверка именно с временем последнего парсинга элемента массива.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 10 июля 2009 г. 10:13, спустя 2 часа 27 минут 57 секунд


    DudeFile и DudeFileIterator )))
    Дуд, сделай человеку DudeCron )
    вот не поверишь …. есть у меня такая вещь … для удобства. CronManager своеобразный)
    Сапожник без сапог
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 10 июля 2009 г. 10:39, спустя 26 минут 8 секунд

    phpdude, так может поделишься? :)
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 10 июля 2009 г. 13:51, спустя 3 часа 11 минут 33 секунды

    Ну простите … обломался … пару раз стартовый прочел и понял, что обломался :-)

    На вскидку … $scan делаем ассоциированным масивом.
    В ключе держим ваш код, в значении - время последней обработки.

    Скрипт запускаем … вычисляем текущее время, отнимаем 6 часов  (и в $tmp записали) …
    и отбираем все элементы $scan, с значением меньше $tmp (значит время меньше, чем текущее минус 6 часов - то, что вам надо)

    Опосля обработки, в $scan обновляем время для нужного ключа - текущее время туда записываем.

    Если запускаете каждые 30 минут – надо изначально таблицу инициализировать значениями "в разброс" … дабы на каждый сеанс скрипта попадала только часть записей $scan
    Спустя 24 сек.
    Или я опять криво понял Вашу задачу?
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 10 июля 2009 г. 13:33, спустя 23 часа 42 минуты 33 секунды

    почему все так сложно ???

    просто надо чуток преобразовать ваш массив…
    у вас сейчас так :
    $scan = array ("6542","7630","5065","4807","6141","6355","7080","3939","4557","2139");

    попробуйте сделать так :
    $scan = array (6542=>'success', 7630=>'success', 5065=>'pending', 4807=>'pending', 6141=>'pending' /*и т.д.*/ );

    т.е. просто для каждого эл-та ставим флаг "выполнен/невыполнен".

    крон запускается раз в 6 часов.

    скрипт берет массив из него первый эл-нт который с кодом "pending", запускает задачу, после завершения ставит статус "success".

    ну логика ясна ?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!