Остановить работу крон задачи, которая выполняет бесконечный цикл?
У нас есть задача на парсинг, которая выполняется каждую минуту.
Крон запускает алгоритм работы, который выполняется в бесконечном цикле.
Он работает, все отлично.
Но у нас есть опасения, что демон со временем может подъедать память. И нам нужно прекращать выполнение процесса.
То есть у нас запущен парсинг он не закончил работу, потому задачи на парсинг еще есть, а уже крон запускает следующий процесс.
Для этого у нас есть проверка на текущее время. Если текущая секунда находится между 58 и 59 секундой, мы прекращаем работу.
Но может случиться так, что мы просто будем пролетать эти секунды и процесс все равно будет продолжать работать.
И нам надо придумать какое еще решение можно сделать, что бы останавливать работу скрипта.
Переделать как-то алгоритм работы нельзя.
У меня на подобной задаче когда-то стоял ручной блокиратор в виде условия, по которому цикл тормозит если в определённой папке появляется файл с именем stop и затирает сам файл. Надо остановить - кинул\создал файл, остановилось. Решение не наилучшее, но простое в реализации.
Я не понял, так чего вы боитесь в итоге - что "будет подъедать" или что процессы будут накладываться друг на друга.
Во втором случае надо определиться - это запуск по крону, ИЛИ демон.
В общем случае надо выкинуть крон вообще и использовать supervisord
тогда проблемы с "как остановить" и "как сделать чтобы процесс не останавливался" решатся сами собой
Если опасаетесь, что будет подъедать память - то может и контролировать в самом скрипте использование памяти и выходить?
Если запускаете каждую минуту, то похоже, что процесс должен работать постоянно. Почему бы тогда не посмотреть в сторону gearman/beanstalk, перезпуск воркеров можно через systemd организовать. Или что имеется в виду по "алгоритмом работы" - сам запуск и получение задачи на парсинг или алгоритм парсинга?
алгоритм парсинга, его переделать нельзя.
Он прекрасно работает, чистый код. Но пока задач на парсинг не так много, но они растут, видим тут есть проблемное место, ищем решение.
Это не задача PHP, как уже выше написали, решается сторонними средствами. Например, systemd - пишется конфигурационный файл в пару строчек, в котором описываются команды на старт, остановку и т.д.