rsync делает 2 резервных копии, если cron запускается во время записи файла

У меня есть crontab для запуска этой команды rsync каждые 30 м

 rsync -rtbpgoi --suffix="."$(date +"%Y%m%d%H%M") --exclude=".*" \ --exclude="~*" --exclude="[Tt][Hh][Uu][Mm][Bb][Ss].[Dd][Bb]" \ --exclude="[Dd][Ee][Ss][Kk][Tt][Oo][Pp].[Ii][Nn][Ii]" \ --info=STATS0,FLIST0,NAME1 /mnt/datastore/ /mnt/dsbackup 

Что происходит, если файл находится в процессе написания, например, например, при длительной загрузке, я получаю дополнительную резервную копию файла, которая является резервной копией неполной загрузки.

Есть ли способ сделать rsync игнорировать файлы, которые все еще записываются или каким-то другим способом избежать резервного копирования неполных файлов? Я знаю, что могу удалить переключатели -b и --suffix но я хочу сохранить функциональность того, что он сохраняет историю версий, когда файлы меняются.

  • Случайный код ошибки rsync 12 «Сброс соединения с помощью peer (104)» из задачи cron, которая запускается каждые 20 минут
  • rsync и смотреть частично переданный видеофайл
  • Сообщение rsync «пропускать нерегулярный файл», когда не копируются ссылки
  • RAID1 vs rsync - безопасность?
  • rsync для cifs: «изменить» время не обновлено
  • Используйте rsync для сравнения удаленного каталога с локальным и сохраните различия в другом локальном каталоге
  • Попросить rsync создать * любые * необходимые каталоги
  • Команда rsync для резервного копирования исходного дерева на другой диск
  • One Solution collect form web for “rsync делает 2 резервных копии, если cron запускается во время записи файла”

    Чтобы ответить на ваш вопрос : rsync , насколько мне известно, не имеет встроенного способа узнать, что какая-то отдельная программа, которую вы используете (веб-браузер и т. Д.), Активно модифицирует файл.

    Учитывая ваш тип резервного копирования (работающий на одном источнике и получателе каждые 30 минут), вы можете добиться окончательного удаления любых промежуточных файлов, которые имеют разные имена, чем окончательный файл (например, download_1.zip.tmp может быть промежуточным файлом для download_1.zip ), добавив в --delete параметр --delete .

    Во время первого запуска rsync файл download_1.zip.tmp будет скопирован в резервную папку. Предполагая, что загрузка закончится в течение 30 минут, промежуточный файл download_1.zip.tmp будет переименован в download_1.zip . При следующем запуске rsync rsync больше не будет искать промежуточный файл download_1.zip.tmp (потому что он был переименован в download_1.zip ), и он удалит download_1.zip.tmp и заменит его download_1.zip в резервной копии. Это также удалит любые другие файлы из вашей резервной копии ( /mnt/dsbackup ), которые больше не существуют в источнике ( /mnt/datastore ).

    Из rsync страницы rsync (версия 3.1.0):

    Это говорит rsync удалять посторонние файлы со стороны приема (те, которые не находятся на стороне отправки), но только для синхронизируемых каталогов. Вы, должно быть, попросили rsync отправить весь каталог (например, «dir» или «dir /») без использования подстановочного знака для содержимого каталога (например, «dir / *»), поскольку подстановочный шаблон расширяется оболочкой, а rsync получает запрос на передачу отдельных файлов, а не в родительский каталог файлов. Файлы, которые исключены из передачи, также исключаются из удаления, если вы не используете опцию -delete-excluded или не отмечаете правила как только соответствующие на стороне отправки (см. Модификаторы include / exclude в разделе FILTER RULES).

    Linux и Unix - лучшая ОС в мире.