LINUX.ORG.RU

Запуск PHP скрипта каждую секунду

 


0

2

Здравствуйте.
Есть такая задача, запускать скрипт PHP каждую секунду (для торговли на криптовалютной бирже).
Немного погуглил и нашел кое-что
https://askubuntu.com/questions/800/how-to-run-scripts-every-5-seconds
http://www.cyberforum.ru/php-beginners/thread721682.html
В целом я понимаю так, что использовать бесконечный цикл while не очень разумное решение, так команды могут пересекаться.
На мой взгляд лучшее решение такое: в панели хостинга создаю крон ежеминутный. И к нему подвешиваю файл:

(sleep 1 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 2 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 3 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 4 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 5 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 6 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 7 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 8 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 9 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 10 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 11 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
(sleep 59 && php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php) &
Однако мешает простое непонимание правильности написания bash скриптов.
Пожалуйста, напишите за меня тот файл, котрый будет вызываться ежеминутным кроном.
И заодно. Правильно ли то, что такое решение лучше, чем через while ?
Спасибо!

Конечно лучше while, если имеется while внутри php, зачем каждый раз дёргать интерпретатор.

mahalaka ★★
()
Ответ на: комментарий от mahalaka

А как средствами PHP запустить бесконечный цикл, который бы работал сутками, неделями..... (каждую секунду)? Причем, каждая следующая итерация, должна исполняться после окончания предыдущей, время исполнения которых может быть разная. Когда ордер выставить, когда перевыставить.... Ведь сам скрипт PHP я запустил однажды, а дальше что?

rafaello
() автор топика
Ответ на: комментарий от rafaello

Ведь сам скрипт PHP я запустил однажды, а дальше что?

Почитай о демонах на PHP

Gargamel
()
Ответ на: комментарий от rafaello

Вот так правильно? Делаем bash скрипт и помещаем его в rc.local

А ты точно уверен, что скрипт отработает максимум 16 миллисекунд? Если будет работать больше, то рано или поздно вызовы скрипта наложатся друг на друга. В теории, это не так страшно, можно оставить, всё зависит от контекста задачи. Но я бы запилил просто демона на PHP, который бы проделывал нужную работу постоянно

Gargamel
()

Можно запускать так:

watch --interval 1 --precise php -q /var/www/binance/wp-content/themes/sparkling/inc/mycron.php
Особенность в том, что если скрипт выполняется долго, то watch --precise будет ждать меньше, чтобы выдержать интервал. Правда, это требует терминала, на сервере придётся завернуть в screen.

legolegs ★★★★★
()

man systemd.timer

Deleted
()
Ответ на: комментарий от rafaello

ээ, ну просто

while { код }

/применить пхп-синтаксис/

mahalaka ★★
()
Ответ на: комментарий от Gargamel

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

А откуда эти 16 мс?

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

А откуда эти 16 мс?

Блин, тут я ступил, ведь намного всё проще, есть целая секунда

Gargamel
()
Ответ на: комментарий от micronekodesu

а кто нибудь имел дело с пакетом mcron для debian9. у меня сервак на дебиане. Читал в интернете, что там можно настраивать в секундах. Но опять таки, могут возникнуть наложения из-за непредсказуемости времени выполнения каждой итерации....

rafaello
() автор топика
Ответ на: комментарий от rafaello

видать, демон на PHP - самое оптимальное решение.....

rafaello
() автор топика

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

Что там будет пересекаться ? Поподробнее объясни

anonymous
()
Ответ на: комментарий от rafaello

ну сделай чтобы конфиг файл читался динамически при каждом вызове класса-обработчика

anonymous
()
Ответ на: комментарий от KivApple

Вообще нормальные люди такое делают не на php.

Кстати, а почему? Что php не может такого особенного, что может питон/руби? php7 пошустрее их в разы, да и си-подобный синтаксис как бы не лишний.

anonymous
()
Ответ на: комментарий от anonymous

php7 пошустрее их в разы, да и си-подобный синтаксис как бы не лишний.

В скриптотне таки скорость интерпретатора не особо решает, важнее наличие прямых рук. Да и си-подобный синтаксис не всегда хорош, особенно в пыхе. Но так я к примеру совсем не против пыха, пусть в вебне варится и дальше, сам сижу на питоне

Gargamel
()
Ответ на: комментарий от Gargamel

сам сижу на питоне

Я потому и спрашиваю. Сейчас прохожу курс по питону, при этом когда-то давно писал на php, поэтому есть с чем сравнить. Пока что отличия такие: необычный синтаксис, необъяснимая всеобщая любовь за его простоту (хотя, имхо, php легче для освоения) и непонятно почему, огромное кол-во AI, NLP и прочих околонаучных библиотек. Почему на PHP это не делают? Хотя в середине нулевых был популярен FANN и к ему даже патчи с CUDA кто-то запилил, и многослоные сети там нормально обучались... Но почему-то не стрельнуло.

anonymous
()
Ответ на: комментарий от anonymous

Почему на PHP это не делают?

На мой взгляд, 1) PHP всегда воспринимался как язык только для веба; 2) Не особо удобная система импорта сторонних либ, основанных на ООП - мешанина из include и namespaces; 3) Сам ООП завезли только в 5 версии + не так всё хорошо с функциональным программированием. Кстати, погугли, в PHP 8 таки решили нейросети запилить. Интересно, что из этого выйдет, хотя думаю, первенство питона отбить в этой стезе не выйдет

Gargamel
()
Ответ на: комментарий от legolegs

screen

Ох уж эти наркоманы любящие обмазываться блевотными скринами на кадый пук.

setsid watch -n 1 твоя-команда &>/dev/null

Дарю.

entefeed ☆☆☆
()
Ответ на: комментарий от Jopich1

а, понятно, все дело в названии, я так и думал =]

anonymous
()

Зачем вам bash ?

Напишите php скрипт вызывающий в цикле нужные вам операции и работающий скажем 5 минут или вообще час, потом cron его перезапускает

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

ism ★★★
()
Ответ на: комментарий от anonymous

огромное кол-во AI, NLP и прочих околонаучных библиотек. Почему на PHP это не делают?

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

Ghostwolf ★★★★★
()
Ответ на: комментарий от Ghostwolf

Потому что питон проще.

Вот эту установку повторяют на каждом углу, и все почему-то в этом убеждены и никак её не оспаривают. Учебник Лутца на полторы тысячи страниц конечно же не в счет ;) Я учу питон прямо сейчас - да, он простой, но не проще php. У питона больше требований к написанию кода, он менее интуитивен, в нём присутствуют странные не свойственные другим языкам конструкции и отсутствуют свойственные (где do while потеряли?)... Неужели это все маркетинг?

anonymous
()
Ответ на: комментарий от anonymous

Php имеет ряд архитектурных недостатков. Есть куча статей на эту тему - неявное приведение чисел в строки и обратно, неоднозначная разрядность числовых типов и ещё вагон и маленькая тележка подобного. К тому же сама ущербная практика перезапускать скрипт на каждый запрос юзера вместо висения в виде демона.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

не пишу и не защищаю пхп, хочу узнать в целях самообразования

К тому же сама ущербная практика перезапускать скрипт на каждый запрос юзера вместо висения в виде демона.

Насколько я знаю там перезапускается не весь код, что-то кешируется, кто в теме, поправьте меня.

У такой схемы наверное тоже должны быть плюсы

- 1 простота реализации

- 2 можно писать код в синхронном стиле

- 3 сравнительно малое потребление сис. ресурсов

anonymous
()
Ответ на: комментарий от anonymous

всем большое спасибо за обсуждение вопроса и внесенные предложения!

rafaello
() автор топика
Ответ на: комментарий от anonymous

непонятно почему, огромное кол-во AI, NLP и прочих околонаучных библиотек

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

anonymous
()
Ответ на: комментарий от anonymous

Ты рассуждаешь с точки зрения человека, у которого есть опыт и определённые ожидания. Раз говоришь про учебники, то и задачи, по которым ты сравниваешь, явно сложнее, чем у среднестатистического учёного, которому нужно быстро произвести какие-то вычисления. Питон менее строгий язык, тем проще людям, не связанным с программированием, влиться и делать своё дело, а не изучать сам питон.

Конечно, определённый маркетинг в этом есть. Собралось сообщество, сделало нужные инструменты, поэтому туда потянулись и другие люди.

Ghostwolf ★★★★★
()
Последнее исправление: Ghostwolf (всего исправлений: 2)
Ответ на: комментарий от anonymous

Какие числа будут выведены в результате выполнения данного кода?

class A:
    val = 1

    def foo(self):
        A.val += 2

    def bar(self):
        self.val += 1


a = A()
b = A()

a.bar()
a.foo()

c = A()

print(a.val)
print(b.val)
print(c.val)

Взято из курса https://stepik.org/lesson/24461/step/11?unit=6767

Да, питон очень простой и интуитивно понятный... А php весь такой сложный и вообще плохой, и дизайн у него неправильный какой-то :)

anonymous
()
Ответ на: комментарий от anonymous

Кстати, по поводу «плохого дизайна»:

The fact that PHP was not originally designed, but instead was developed organically has led to inconsistent naming of functions and inconsistent ordering of their parameters.[17] In some cases, the function names were chosen to match the lower-level libraries which PHP was «wrapping»,[18] while in some very early versions of PHP the length of the function names was used internally as a hash function, so names were chosen to improve the distribution of hash values.[19]

Взято отсюда https://en.wikipedia.org/wiki/PHP

Т.е. на самом деле дизайн php повторяет всеми любимую libc & co

anonymous
()
Ответ на: комментарий от Ghostwolf

Я думаю, что всё дело в способе подачи. Для python существует уйма онлайн курсов, его преподают в универах на непрограммерских специальостях, вокруг него создана положительная репутация и его не принято ругать в отличии от php. Т.е. php учат только вебдевелоперы, курсов по нему в разы меньше, репутация ужасная, его принято ругать.

PS. я вообще фанат крестов, и для меня вся скриптотня на одно лицо, поэтому не вижу всем очевидной простоты python

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.