Пишу WP плагин для автоматичекого добавления/обновления товаров в Woocommerce с сайта-донора. Процесс парсинга должен запускаться раз в несколько дней через wp cron и будет длится порядка 1-2 часа. Т.к. время выполнения php скриптов на сервере ограничено несколькими минутами и в связи с тем, что парсер может падать из-за ошибок, необходимо реализовать возможность выполнения работы по частям. Для этого во время работы парсера в transient-опцию пишется текущий обрабатывемый товар. При последующем запуске, работа продолжается с сохранённой в состоянии позиции. Если все товары обработаны, опция удаляется. Теперь встал вопрос как лучше реализовать повторный запуск парсера после выполнения частичной обработки. В голову приходит два варианта:
- При каждом запуске определить
max_execution_time
и назначить одиночное задание через max_execution_time
+ несколько секунд. Если товары закончились, то удалить это задание.
- Второй вариант предусматривает создание вспомогательной задачи с частотой запуска раз в 5 минут, которая в случае наличия сохранённого состояния и если парсер в данный момент не работает будет снова его запускать.
Какой по-вашему мнению наиболее оптимальный вариант для этой задачи? Возможно предложите другие варианты?