
¿Hay alguna manera de sincronizar una carpeta con una carpeta de eliminación del servidor pero mover todo solo después de que se haya realizado toda la transferencia?
No quiero que los archivos se muevan uno tras otro, porque esto causaría problemas con el servidor web en ejecución.
Prefiero mover la carpeta completa después de que todo se haya transferido al servidor (lo que demora aproximadamente ~1s)
Respuesta1
estas buscando el--actualizaciones-delayopción. De man rsync
:
--delay-updates This option puts the temporary file from each updated file into a holding directory until the end of the transfer, at which time all the files are renamed into place in rapid succession. This attempts to make the updating of the files a little more atomic. [...] See also the "atomic-rsync" perl script in the "support" subdir for an update algorithm that is even more atomic (it uses --link-dest and a parallel hierarchy of files).
Respuesta2
La forma más segura es hacer que rsync coloque los archivos en un directorio alternativo fuera del docroot del servidor web. Luego cambie la configuración del servidor para que apunte docroot a la nueva carpeta e indique al servidor web que realice una"agraciado"recarga de su configuración. Con Apache, esto debería garantizar que no se manejen mal ni se abandonen solicitudes.
La USR1 o señal elegante hace que el proceso principal avise a los niños que salgan después de su solicitud actual (o que salgan inmediatamente si no están sirviendo nada). El padre vuelve a leer sus archivos de configuración y vuelve a abrir sus archivos de registro. A medida que cada hijo muere, el padre lo reemplaza con un hijo de la nueva generación de la configuración, que comienza a atender nuevas solicitudes de inmediato.
En otras palabras, automatizaría esto usando un script de shell y ssh en lugar de intentar encontrar opciones de rsync para administrar su servidor web.