В интернете есть пара решений как запускать задачу из cron каждые 10 секунд. (Стандартно он может запускать раз в минуту.) Мне бы хотелось узнать как лучше это сделать для конкретной, моей задачи и как эти решения из интернета работают (подводные камни).
У меня в cron уже есть 5 заданий, которые выполняются каждые 5-10 минут и очень быстро (простые быстрые скрипты).
И мне будет нужно запускать ещё один php скрипт каждые 10 секунд.
Зачем тебе это и ты случайно не хакермэн?
По традиции сразу возникают 2 вопроса. Это не DDOS и зачем тебе так часто запускать - оно не надо.
Отвечаю. Мне надо собирать данные с биржи. И данные там обновляются очень часто.
Поэтому оптимальное время сбора данных будет 10 секунд. Как ни крути - там появляются новые данные и старые исчезают.
Так что это единственный способ - как ни правь код, что не делай через 10 секунд там просто всё исчезнет.
И это ещё медленно т.к. биржа позволяет собирать данные каждые 2 секунды. Но свой сервер я так грузить не буду.
И это тоже медленно т.к. про разрабы используют отдельные каналы с высокими скоростями и без задержек...но я увлекся.
Пока я рассматриваю 2 варианта решения данной задачи.
Вариант 1 - цикл в скрипте.
Крон раз в 90 секунд запускает скрипт, в котором есть цикл. Цикл отрабатывает действие 10 раз, за время менее 90 секунд. Приблизительно так.
Есть проблема - php.ini время выполнения скрипта( 30 сек по дефолту). Увеличивать не рекомендуют и я с этим согласен. Есть и другие скрипты. Сервер не апач, директива set_time_limit не применима. Что тут делать не ясно.
Вариант 2.
* * * * * /opt/php56/bin/php /home/k/tmp/test.php; /bin/sleep 30; /opt/php56/bin/php /home/k/tmp/test.php
Вполне не плох, но что тогда будет с другими скриптами?
Эта задержка в 30 секунд задержит выполнение задач крона, написанных ниже?
Например
* * * * * /opt/php56/bin/php /home/k/tmp/test.php; /bin/sleep 600; /opt/php56/bin/php /home/k/tmp/test.php
//Эта задача должна выполнятся каждую минуту, но sleep 600 задержит её выполнение на 10 минут.
*/1 * * * * /opt/php56/bin/php /home/k/tmp/test1.php;
А может у вас есть решение получше?
Как лучше запускать задачу из cron каждые 10 секунд?