storage - tutorial - evitar que rsync elimine archivos fuente sin terminar
rclone timeout (4)
¿Cuánto control tienes sobre el proceso de descarga? Si tira el suyo, puede hacer que el archivo se descargue vaya a un directorio temporal o tenga un nombre temporal hasta que termine la descarga, y luego muévalo al nombre correcto cuando esté listo. Si está utilizando un software de terceros, entonces no tiene tanto control, pero aún puede hacer lo del directorio temporal.
Tengo dos máquinas, velocidad y masa. la velocidad tiene una conexión rápida a Internet y ejecuta un rastreador que descarga muchos archivos en el disco. la masa tiene mucho espacio en disco. Quiero mover los archivos de la velocidad a la masa después de que terminen la descarga. Lo ideal es que acabara de correr:
$ rsync --remove-source-files speed:/var/crawldir .
pero me preocupa que rsync desvincula un archivo de origen que aún no ha terminado de descargarse. (Miré el código fuente y no vi nada que lo protegiera). ¿Alguna sugerencia?
Me parece que el problema es transferir un archivo antes de que esté completo, no que lo esté borrando.
Si esto es Linux, es posible que un archivo sea abierto por el proceso A y el proceso B puede desenlazar el archivo. No hay ningún error, pero, por supuesto, A está perdiendo el tiempo. Por lo tanto, el hecho de que rsync elimine el archivo fuente no es un problema.
El problema es que rsync elimina el archivo fuente solo después de que se haya copiado, y si aún se está escribiendo en el disco, tendrá un archivo parcial.
¿Qué tal esto? Monte la mass
como un sistema de archivos remoto (NFS funcionaría) en speed
. A continuación, simplemente rastree los archivos directamente en la web.
Rsync puede excluir archivos que coincidan con ciertos patrones. Incluso si no puede modificarlo para que descargue archivos a un directorio temporal, tal vez tenga la convención de nombrar los archivos de forma diferente durante la descarga (por ejemplo: foo.downloading
mientras descarga para un archivo llamado foo
) y puede usar esto propiedad para excluir archivos que aún se están descargando de copiarse.
Si tiene control sobre el proceso de rastreo, o si tiene un resultado predecible, las soluciones anteriores (almacenar en un archivo temporal hasta que termine, luego ir al lugar de descargas completo o ignorar los archivos con un tipo de nombre ''descarga'') Podría funcionar. Si todo eso está fuera de tu control, puedes asegurarte de que ningún proceso abre el archivo haciendo ''lsof $ filename'' y verificando si hay un resultado. Claramente, si nadie tiene el archivo abierto, es seguro moverlo de nuevo.