Самый простой способ это юзать два php-fpm на разных портах, обновили код в одной директории, переключили nginx на другой порт и сделали ему reload
А в nginx reload работает без сбрасывания клиентов.
делов настроить минут на 30.
Тут дело не в том, что ждать/не ждать, а что ОС сразу даёт отлуп, поскольку сокет не может приконнектиться — php-fpm порт ещё не забиндил. Так что в общем случае, кроме извращенств с error_page, боюсь что нет
В моём случае проблема была в кешировании абсолютного пути к файлам. Симлинк уже указывает на новую директорию, а PHP продолжает лезть за файлами в старую.