Как лучше запускать задачу из cron каждые 10 секунд?

В интернете есть пара решений как запускать задачу из 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 секунд?
  • Вопрос задан
  • 2865 просмотров
Решения вопроса 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Почему вы цикл внутри PHP-скрипта решили делать, а не, скажем, что-нибудь такое:
#!/bin/bash
for i in {1..10}
do
   /opt/php56/bin/php /home/k/tmp/test1.php
   sleep 10
done


Это, как и ваш "вариант номер 2" на другие кроновские задания никакого влияния не окажет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
запускать каждые 10 секунд - не слишком выгодно.

Напишите себе демона и пусть он все время работает с банальной паузой или сверкой timestamp.
А в кроне просто периодически проверяйте запущен он или нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы