Александр Касиков, эм... а зачем ты его зациклил?
Давай по-порядку:
1) Агент начинает выполняться $item_count = 0
2) Он что-то делает с элементами. $item_count по прежнему 0
3) Далее, ты итерируешь его 22 тысячи раз, проверяя внутри цикла, что $iteration (который равен 0) за вычером $item_count (который равен 0) должен быть равен тысячу (чего никогда не будет). И увеличиваешь счетчик $i на 1 единицу.
Вот тут и происходит зацикливание: условие ($iteration - $item_count) == 1000 никогда не сработает, так как оба эти числа у тебя заданы и нигде не изменяются
Вообще - зачем вызывать функцию внутри функции? Почему нельзя просто вернуть Agent_import_catalog($item_count) с измененным $item_count?
Да и вообще зачем использовать агенты, когда можно 1 раз запустить скрипт в консольном режиме и все будет сделано
Вы совершенно не понимаете что такое агенты, для чего они нужны и как работаю. Читайте документацию