Файлы целевого сервера перемещены, и Rsync снова копирует те же файлы

Для этого уже давно существовала функция, но она отсутствовала в руководстве до 2018 года. :Нажмите клавишу c, чтобы выбрать выделенный в данный момент процесс, а также все его дочерние процессы. Затем операции, применяемые к выбранным процессам (, такие как уничтожение с помощью клавиши k), применяются к процессу и его потомкам.

Но это не атомарно. Если между моментом, когда вы нажмете c, и моментом, когда ядро ​​уничтожит все процессы, будут созданы новые дочерние процессы, они не будут уничтожены и, скорее всего, в конечном итоге будут повторно присоединены к процессу инициализации. Это связано с тем, что htop зацикливается на выбранных процессах и убивает их один за другим.

Некоторое время назад я предложил патч для добавления функции уничтожения атомарной группы -в htop, но реализация не была достаточно согласованной, чтобы ее можно было объединить. С его помощью можно атомарно убить целую группу процессов из htop. Это не совсем то же самое, что убить целое дерево, но, насколько мне известно, ядро ​​не предоставляет никакого способа уничтожить произвольное дерево атомарно.

0
15.09.2021, 12:25
1 ответ

Если файлы назначения были перемещены, то с точки зрения rsyncони больше не существуют. Флаг --ignore-existingбесполезен, потому что файлы не существуют там, где они должны быть, поэтому игнорировать их нечего.

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

path='/share/CACHEDEV1_DATA/Lanein1/Unicard'
flag="$path.flag"

# Must have a flag file. If we don't then create one from the epoch
if ssh -nq admin@71.122.227.193 "[ ! -f '$flag' ]"
then
    touch -t 197001010000 /tmp/1970
    scp -p /tmp/1970.flag admin@71.122.227.193:"$flag"
    rm -f /tmp/1970.flag
fi

# Flag the start of the synchronisation
ssh -nq admin@71.122.227.193 "date >'$flag.tmp'"

# Copy files newer than the flag
if ssh -nq admin@71.122.227.193 "find '$path/' -depth -newer '$flag' -print0 |
    rsync -avz --files-from - --from0 admin@71.122.227.193:/ /home/toor/UCDownloads/
then
    # Install the new flag
    ssh -nq admin@71.122.227.193 "mv -f '$flag.tmp' '$flag'"
fi

Для тех, кто не знаком с QNAP, команда touchне является стандартной, а функциональность rsyncурезана. Я использовал touchна локальном клиенте для создания файла, датированного 1970 -01 -01, а затем передал его в удаленную систему в качестве начального флага. (Если бы touchсуществовал в удаленной системе, было бы намного проще создать файл удаленно. )В findвходят только файлы и каталоги, созданные/измененные с момента установки флажка.

0
15.09.2021, 13:11

Теги

Похожие вопросы