Как правильно дергать php скрипт кроном?

12
Solmyr
На сайте с 10.09.2007
Offline
501
2453

Есть скрипт который надо время от времени выполнять. Время выполнения скрипта 2-10 мин. Если дергать через wget то за время выполнения скрипта происходит connection timeout у nginx и выполнение скрипта обрывается. Повышать таймаут ради крона - как-то не совсем верно.

Какие есть еще варианты? В частности, можно ли у nginx установить более высокий таймаут на конкретный УРЛ?

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#1
выполнение скрипта обрывается.

В скрипт добавьте:

set_time_limit(0);ignore_user_abort(1);

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Joker-jar
На сайте с 26.08.2010
Offline
154
#2

Можно использовать php-cli, если в скрипте не используются всякие переменные окружения веб-сервера.

Solmyr
На сайте с 10.09.2007
Offline
501
#3
Joker-jar:
Можно использовать php-cli, если в скрипте не используются всякие переменные окружения веб-сервера.

Используются относительные пути, относительно каталога веб-сервера.

DV
На сайте с 01.05.2010
Offline
644
#4

Можно сочинить что-то вроде

cd /путь/до/скрипта && /usr/local/bin/php ./скрипт.php  > /dev/null 2>&1
VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
vandamme
На сайте с 30.11.2008
Offline
672
#5

дергаю так

wget -O /dev/null http://site.ru/script.php 2>/dev/null
N
На сайте с 06.05.2007
Offline
419
#6

Solmyr, правильно - не дергать, а запускать /usr/bin/php. В этом случае при стандартной настройке на типичном VPS ограничение времени выполнения снято вообще.

Но из-за того что программисты не могут писать правильные скрипты для cron все повсеместно "дергают".

Почему не могут ? да посчитайте сами каким должен быть правильный скрипт для Cron :

- Знает, что cron исполняет задачи из корня файловой системы и переходит в рабочий каталог.

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

- Если эффективные пользователи различаются, то делает соответствующий chmod для файлов и каталогов.

- Не выводит ничего на стандартный вывод, а пишет в логи. Любой вывод считается ошибкой и cron отправляет его на email администратору для анализа. И этого следует, что он либо идеально написан и не выводит предупреждения php, либо гасит их, если уж они вылезают.

Статистически, с первого раза никто из наших подрядчиков не писал правильный скрипт.

И я не придираюсь. Просто в cron так задумано. Эти пункты вполне обычны для задач cron.

А что "правильно" для вас ?

Кнопка вызова админа ()
S1
На сайте с 17.04.2011
Offline
79
#7

Я ставлю для крон-скриптов атрибут executed, и пишу первой строкой #!/bin/php -q

А дальше из крона просто

*/5 * * * * ~/scripts/need-script.php 2>&1>/dev/null | mail -E -s "ОШИБКА bla-bla" my_email@mail.ru

В этом случае нет ограниченй по времени, не задействуется веб-сервер, в случае ошибки я пишу в самом скрипте вывод текста ошибки в stderr, и только если stderr не пустое, то мне прийдет письмо (опция -E)

Но согласен с предыдущим участником - есть некоторые особенности именно cli-скриптов.

Solmyr
На сайте с 10.09.2007
Offline
501
#8
netwind:
Почему не могут ?

Потому что скрипт должен взаимодействовать с ядром CMS, нативными для этой CMS методами. А переделывать CMS для того чтобы некоторым программистам скрипты казались "правильными" - это чересчур. Программирование ради программирования любят только программисты.

vob2014
На сайте с 30.03.2014
Offline
91
#9

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

Еще есть фильтры на потоки, глубоко не разбирался и не пробовал, но вроде там лимит времени может быть на сам поток намного больше чем для скрипта...

по крайней мере была демка где фильтр на перле на потоке посылал нотификации в браузер минут 10 пока гиг файл грузился...

...
N
На сайте с 06.05.2007
Offline
419
#10
Solmyr:
Потому что скрипт должен взаимодействовать с ядром CMS, нативными для этой CMS методами. А переделывать CMS для того чтобы некоторым программистам скрипты казались "правильными" - это чересчур. Программирование ради программирования любят только программисты.

Все перечисленные пункты вполне уживаются с CMS. Чтобы их доделать нужно просто прочитать man cron чуть больше.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий