@Kirill-Gorelov
С ума с IT

Остановить работу крон задачи, которая выполняет бесконечный цикл?

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

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

Для этого у нас есть проверка на текущее время. Если текущая секунда находится между 58 и 59 секундой, мы прекращаем работу.
Но может случиться так, что мы просто будем пролетать эти секунды и процесс все равно будет продолжать работать.

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

Буду рад любым идеям.
  • Вопрос задан
  • 244 просмотра
Пригласить эксперта
Ответы на вопрос 5
FanatPHP
@FanatPHP
Чебуратор тега РНР
Я не понял, так чего вы боитесь в итоге - что "будет подъедать" или что процессы будут накладываться друг на друга.
Во втором случае надо определиться - это запуск по крону, ИЛИ демон.

В общем случае надо выкинуть крон вообще и использовать supervisord
тогда проблемы с "как остановить" и "как сделать чтобы процесс не останавливался" решатся сами собой
Ответ написан
Комментировать
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
Если опасаетесь, что будет подъедать память - то может и контролировать в самом скрипте использование памяти и выходить?
Если запускаете каждую минуту, то похоже, что процесс должен работать постоянно. Почему бы тогда не посмотреть в сторону gearman/beanstalk, перезпуск воркеров можно через systemd организовать. Или что имеется в виду по "алгоритмом работы" - сам запуск и получение задачи на парсинг или алгоритм парсинга?
Ответ написан
402d
@402d
начинал с бейсика на УКНЦ в 1988
проверяй не номер секунды, а сколько прошло
microtime(true) - $start_time
Ответ написан
Комментировать
pLavrenov
@pLavrenov
Разработка сайтов
Пора познакомиться с Supervisor*ом. Он будет поднимать процесс если тот упадет или перезапускать когда надо.

А чтобы не использовать бесконечный цикл надо бы это все у очереди запустить. Циклы эти не надежные
Ответ написан
Комментировать
lenk0belk0
@lenk0belk0
программироваю
Это не задача PHP, как уже выше написали, решается сторонними средствами. Например, systemd - пишется конфигурационный файл в пару строчек, в котором описываются команды на старт, остановку и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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