Читая ваш код, я думаю, вы должны переместить "flock ($ handler, LOCK_UN);" внутри условного блока if (flock ($ handler, LOCK_EX)) {} ".
Чтобы точно выяснить, что и где застревает, я бы добавил метки даты (и сбрасывал, чтобы ничего не зависло в буфере вывода) отладки вывода как до, так и после каждого вызова flock (), fopen (), fwrite () и fclose () и перенаправить вывод каждого экземпляра скрипта в свой собственный файл.
Затем, после замораживания + перезапуска, вы можете просмотреть конец каждого файла и посмотреть, что делал каждый скрипт при перезапуске. Сравнивая метки даты, вы сможете увидеть, какие сценарии «заморозили» первыми.