La mia prima idea è:
# deploy into public_html_new, and then:
rsync -vaH --delete public_html_new/ public_html/
Una buona soluzione era usare rsync. Ha cambiato solo i file realmente cambiati. Attenzione, le barre alla fine dei percorsi sono importanti.
Normalmente Apache non ha bisogno di un riavvio, non è il mondo Java. Controlla la modifica di ogni file php su richiesta e rilegge (e ri-tokenizza) la modifica automaticamente.
Git pull era simile, anche se era un po 'più difficile da scrivere. Ovviamente ha consentito un ampio spettro di diverse possibilità di rilevamento di fusioni / modifiche.
Questa soluzione funzionerà senza problemi solo se non ci sono cambiamenti davvero importanti - se ci sono grandi cambiamenti nella distribuzione, un po 'di pericolo non può essere chiuso, perché c'è un intervallo di tempo non trascurabile, quando il codice verrà parzialmente modificato e parzialmente no.
Se ci sono grandi cambiamenti, il mio suggerimento era la soluzione iniziale (due rinominare).
Ecco una soluzione atomica un po 'hardcore, ma al 100%:
(1) fai un mount alternativo del tuo filesystem, dove si svolge il tuo magento:
mount /dev/sdXY /mnt/tmp
(2) fai un --bind
mount del tuo public_html_new in public_html:
mount --bind /path/to/public_html_new /path/to/public_html
Da questo punto, l'apache vedrà la tua nuova distribuzione. Qualsiasi cambiamento di 404 è impossibile.
(3) esegui la sincronizzazione con rsync, ma sul punto di montaggio alternativo):
rsync -vaH --delete /mnt/tmp/path/to/public_html_new/ /mnt/tmp/path/to/public_html/
(4) rimuovere il supporto di rilegatura
umount /path/to/public_html