E
E
Evgeny Ivanov2018-11-30 22:57:08
linux
Evgeny Ivanov, 2018-11-30 22:57:08

What is the best way to run a task from cron every 10 seconds?

There are a couple of solutions on the Internet how to run a task from cron every 10 seconds. (By default, it can run once a minute.) I would like to know how best to do this for my specific task and how these solutions from the Internet work (pitfalls).
I already have 5 cron jobs running every 5-10 minutes and very fast (simple quick scripts).
And I will need to run another php script every 10 seconds.

Why do you need this and are you by any chance a hackerman?

По традиции сразу возникают 2 вопроса. Это не DDOS и зачем тебе так часто запускать - оно не надо.
Отвечаю. Мне надо собирать данные с биржи. И данные там обновляются очень часто.
Поэтому оптимальное время сбора данных будет 10 секунд. Как ни крути - там появляются новые данные и старые исчезают.
Так что это единственный способ - как ни правь код, что не делай через 10 секунд там просто всё исчезнет.
И это ещё медленно т.к. биржа позволяет собирать данные каждые 2 секунды. Но свой сервер я так грузить не буду.
И это тоже медленно т.к. про разрабы используют отдельные каналы с высокими скоростями и без задержек...но я увлекся.

So far I am considering 2 options for solving this problem.
Option 1 - loop in the script.
Cron once every 90 seconds runs a script that has a loop. The loop executes the action 10 times, in less than 90 seconds. Approximately so.
There is a problem - php.ini script execution time (30 seconds by default). It is not recommended to increase and I agree with this. There are other scripts as well. The server is not Apache, the set_time_limit directive is not applicable. What to do here is not clear.
Option 2.
* * *  * * /opt/php56/bin/php /home/k/tmp/test.php; /bin/sleep 30; /opt/php56/bin/php /home/k/tmp/test.php

Not bad at all, but what will happen to other scripts then?
Will this 30 second delay delay the execution of the cron tasks written below?
for example
* * *  * * /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;

Or maybe you have a better solution?
What is the best way to run a task from cron every 10 seconds?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
K
ky0, 2018-12-01
@logpol32

Why did you decide to do a loop inside a PHP script, and not, say, something like this:

#!/bin/bash
for i in {1..10}
do
   /opt/php56/bin/php /home/k/tmp/test1.php
   sleep 10
done

This, like your "option number 2", will not have any effect on other kronov tasks.

S
Saboteur, 2018-11-30
@saboteur_kiev Куратор тега Linux

запускать каждые 10 секунд - не слишком выгодно.
Напишите себе демона и пусть он все время работает с банальной паузой или сверкой timestamp.
А в кроне просто периодически проверяйте запущен он или нет.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question