multi cron

vooo
На сайте с 25.08.2011
Offline
83
1130

Приветствую, всем доброго времени!

Задача: нужно по крону запускать один и тот же скрипт (php) NN раз одновременно и многопоточно.

Какие существуют варианты, кроме создания NN заданий для крона и гонять через апач curl_multi_exec'ом?

Буду рад любым идеям...

Aisamiery
На сайте с 12.04.2015
Offline
293
#1

* * * * * php -f script.php;php -f script.php;php -f script.php;php -f script.php;php -f script.php;php -f script.php..... и до бесконечности

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

А вообще рекомендую сделать демона, что то типо:


do {
// Тут код вашего скрипта
} while (true);

И запустить его руками через консоль (там обычно в настройках время жизни скрипта не ограничивают) столько копий, сколько вам потребуеться. Только надо следить за тем чтобы не плодились переменные и прочее, так сказать чтоб "не потекла" память, ну и смотерть что вы там делаете, если там в основном операции вычисления, то скорее всего вас хостер (если на общей ноде) попросить покинуть их компанию, если нет и с вменяемым управлением внутри скрипта, то все обойдеться.

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
vooo
На сайте с 25.08.2011
Offline
83
#2

Aisamiery, под многопоточностью я подразумеваю выполнение 10-20-30 копий скрипта за время выполнения одной копии скрипта... сейчас это у меня делается curl_multi_exec'ом, но жрется много лишних ресурсов и забивается апач, а на железке еще и сайты с посещалкой работают, так что ищу варианты...

первый Ваш вариант не подходит, т.к. кол-во "потоков" зависит от вводных данных, "-f" это "в фоне" как я понимаю?.. ну если только про запас вызвать этой командой копий 50, и ненужные вызовы сбрасывать...

по хостеру нет проблем, у меня в основном свои железки и дорогие ВПСы.

---------- Добавлено 27.01.2017 в 02:59 ----------

а что если

exec('php -f script.php;');
из php? вариант?
Оптимизайка
На сайте с 11.03.2012
Offline
396
#3
vooo:
Буду рад любым идеям...

You can create simple shell script to do that (for example, this will run 10 instances of script.php in parallel):


#!/bin/bash

for i in $(seq 0 9); do
(php -f script.php >&2 & wait %1; echo $?) &
done | grep -qv 0 && echo "Script failed!"

Then, add this script to your cron schedule

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
vooo
На сайте с 25.08.2011
Offline
83
#4

не канает

php -f script.php
=(( тупо не выводится результат, время затрачивается такое же как при последовательном вызове... даже через ';' собрал в одну команду - то же самое, последовательно =((

---------- Добавлено 27.01.2017 в 21:38 ----------

Оптимизайка:
You can create simple shell script to do that (for example, this will run 10 instances of script.php in parallel):


#!/bin/bash

for i in $(seq 0 9); do
(php -f script.php >&2 & wait %1; echo $?) &
done | grep -qv 0 && echo "Script failed!"


Then, add this script to your cron schedule

ждет все равно(

---------- Добавлено 27.01.2017 в 21:39 ----------

решение найдено:

exec("php script.php > /dev/null 2>/dev/null &");
вобще ничего не ждет... то что надо)
Оптимизайка
На сайте с 11.03.2012
Offline
396
#5
vooo:
ждет все равно

It runs all tasks in parallel and waits until all tasks will completed.

решение найдено:
exec("php script.php > /dev/null 2>/dev/null &");
вобще ничего не ждет

Wrong. What about tasks overlapping?

vooo
На сайте с 25.08.2011
Offline
83
#6
Оптимизайка:
Wrong. What about tasks overlapping?

script.php will be runned with arguments...

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