Моя первая идея:
# deploy into public_html_new, and then:
rsync -vaH --delete public_html_new/ public_html/
Хорошим решением было использовать rsync. Это изменило только действительно измененные файлы. Осторожно, косые черты в конце дорожек здесь важны.
Обычно apache не требует перезагрузки, это не мир Java. Он проверяет изменения каждого php-файла по запросу и автоматически перечитывает (и повторно токенизирует) изменения.
Git Pull были похожи эффективны, хотя это было немного сложнее для сценария. Конечно, это позволило широкий спектр различных возможностей обнаружения слияния / изменения.
Это решение будет беспрепятственно только в том случае, если нет действительно серьезных изменений - если в развертывании произошли большие изменения, небольшая опасность не может быть закрыта, потому что существует немалый интервал времени, когда код будет частично изменен и частично нет.
Если есть большие изменения, мое предложение было вашим первоначальным решением (два переименовать).
Вот немного хардкорное, но 100% атомное решение:
(1) сделайте альтернативное монтирование вашей файловой системы, где находится ваше magento:
mount /dev/sdXY /mnt/tmp
(2) выполните --bind
монтирование вашего public_html_new в public_html:
mount --bind /path/to/public_html_new /path/to/public_html
С этого момента apache увидит ваше новое развертывание. Любое изменение 404 невозможно.
(3) выполнить синхронизацию с rsync, но в альтернативной точке монтирования):
rsync -vaH --delete /mnt/tmp/path/to/public_html_new/ /mnt/tmp/path/to/public_html/
(4) снять крепление
umount /path/to/public_html