garder rsync de retrait d'inachevé fichiers source
J'ai deux machines, la vitesse et la masse. la vitesse a une connexion Internet rapide et est en cours d'exécution d'un robot qui permet de télécharger un grand nombre de fichiers sur le disque. la messe a beaucoup d'espace disque. Je veux déplacer les fichiers de la vitesse à la messe une fois le téléchargement terminé. Idéalement, je voudrais juste lancer:
$ rsync --remove-source-files speed:/var/crawldir .
mais j'ai peur qu'rsync va supprimer le lien d'un fichier source qui n'a pas fini de se télécharger encore. (J'ai regardé le code source et je ne vois rien à protéger contre ça.) Des suggestions?
Vous devez vous connecter pour publier un commentaire.
Il me semble que le problème est transfert un fichier avant qu'il complète, pour ne pas que vous êtes le supprimer.
Si c'est Linux, il est possible pour un fichier à ouvrir par A et B deux processus peut dissocier le fichier. Il n'y a pas d'erreur, mais, bien sûr, est perdre son temps. Par conséquent, le fait que rsync supprime le fichier source n'est pas un problème.
Le problème est rsync supprime le fichier source seulement après qu'il a copié, et si c'est encore en cours d'écriture sur le disque, vous aurez un fichier partiel.
Comment à ce sujet: le Mont
mass
comme un système de fichiers distants (NFS fonctionne) dansspeed
. Puis il suffit de web-analyse les fichiers directement.Quel contrôle avez-vous sur le processus de téléchargement? Si vous roulez votre propre, vous pouvez avoir le fichier en cours de téléchargement d'aller à un répertoire temp ou ont un nom temporaire jusqu'à ce qu'il est fini le téléchargement, puis mv le nom correct quand il est fait. Si vous êtes à l'aide de logiciels tiers, alors vous n'avez pas beaucoup de contrôle, mais vous pourriez encore être en mesure de faire le répertoire temp chose.
Rsync pouvez exclure les fichiers qui correspondent à certains modèles. Même si vous ne pouvez pas le modifier pour le rendre de télécharger des fichiers dans un répertoire temporaire, peut-être que c'est une convention de nommage des fichiers différemment pendant le téléchargement (par exemple:
foo.downloading
lors du téléchargement d'un fichier nomméfoo
) et vous pouvez utiliser cette propriété pour exclure les fichiers qui sont encore en cours de téléchargement d'être copiés.Si vous avez le contrôle sur le processus d'exploration, ou il est prévisible de sortie, les solutions ci-dessus (à stocker dans un fichier temporaire jusqu'à la fin, puis mv qui pratiquent la-téléchargements place, ou en ignorant les fichiers avec un '.télécharger " le genre de nom) pourrait fonctionner. Si tout cela est au-delà de votre contrôle, vous pouvez assurez-vous que le fichier n'est pas ouvert par n'importe quel processus en faisant "lsof $filename" et de vérifier s'il y a un résultat. Il est clair que si personne n'a ouvert le fichier, il est sûr de se déplacer sur.