Добрый день! Уже два дня бьюсь с проблемой, никак не могу решить, следующего характера:
1. есть php скрипт - cron.php, его задача через file_get_content забирать api xml с чужого сервера достаточно большого размера и проводить парсинг элементов с последующим распределением и записью в базу MySQL.
2. есть crontab с записью */15 * * * * /usr/bin/curl --silent --compress http://localhost/cron/cron.php (каждые 15 минут дергает curlом мой скрипт)
Когда я запускаю этот скрипт через браузер, все прекрасно срабатывает. Пишу в командной строке команду из cron, тоже все отлично срабатывает.
Это касается и /usr/bin/php и /usr/bin/wget . То есть вроде бы и нет никаких проблем, но не тут то было. Оставил крон. Через час понял, что скрипт просто не выполняется. Смотрю что файл APIшки заканчивается но не до конца и соответственно скрипт обрывается, видимо во время как раз таки file_get_content.
Обратился за помощью к google. Везде говорят что проблема с ExpireTimeout на моей машине. Но ведь через браузер и командную строку все норм. Я на всякий случай увеличил время, но это не помогло.
Дальше полез в самые глубины и коснулся tcp моего компа: /proc/sys/net/ipv4/tcp_keepalive_time и запулил туда 7200. Но опять же не помогло. Вот заметил что временами cron скрипт все таки выполняется. Моментами проскакивает.
Может мне кто объяснить на нормальном языке, в чем проблема? Почему через командную строку и браузер все хорошо проходит, а cron так выкаблучивается? Может быть я что то не так делаю? time выполнения скрипта примерно 16-45 секунд.
P.S.
uname -a: Linux localhost 3.4.58-gentoo #1 SMP Fri Aug 16 10:09:24 EEST 2013 x86_64 Intel® Xeon® CPU E5-2620 0 @ 2.00GHz GenuineIntel GNU/Linux
apache2 -v: Server version: Apache/2.4.12 (Unix) Server built: Feb 17 2015 23:36:29
php -v:PHP 5.6.12-pl0-gentoo (cli) (built: Sep 7 2015 10:22:35)
PHP.INI:
max_execution_time = 7200
max_input_time = 7200
post_max_size = 128M
memory_limit = 512M
P.S.p.s. Только не надо мне говорить чтобы я в крон добавлял команду запуска через браузер или ставил пакеты подобные curl,wget. Я уверен что только этими пакетами пользуются хостинги. Надо именно ответ на основе этих пакетов. Максимум /ust/bin/php.
Cron + curl + php (Остановка выполнения скрипта по крону)
Модераторы: SLEDopit, Модераторы разделов
-
Bizdelnick
- Модератор
- Сообщения: 21504
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Cron + curl + php
А если добавить -o /dev/null?
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |