Алгоритм rsync
дельта-передачи делает это по умолчанию. Цитата из справочной страницы rsync:
ОПИСАНИЕ
Rsync — это быстрый и необычайно универсальный инструмент для копирования файлов. Это может копировать локально, на/с другого хоста через любую удаленную оболочку или к/от удаленного демона rsync. Предлагает большое количество вариантов которые контролируют каждый аспект его поведения и позволяют очень гибко указание набора копируемых файлов. Он известен своим алгоритм дельта-передачи, который уменьшает объем данных, отправляемых через сети, отправляя только различия между исходными файлами и существующие файлы в месте назначения . Rsync широко используется для резервного копирования и зеркалирования, а также в качестве улучшенной команды копирования для повседневного использования. использовать.
Если вы хотите отключить его, вам придется использовать опцию -W
или --весь-файл
.
-W, --whole-file
Эта опция отключает алгоритм дельта-передачи rsync, который заставляет все переданные файлы отправляться целыми. То передача может быть быстрее, если эта опция используется, когда полоса пропускания между исходной и конечной машинами выше, чем пропускная способность на диск (особенно когда «диск» на самом деле является сетевым файловая система). Это значение по умолчанию, когда и источник, и место назначения указываются как локальные пути, но только в том случае, если не указан параметр пакетной записи. в результате.
Если вы действительно знаете, насколько изменился ваш файл, вы можете даже оптимизировать это поведение дельта-передачи, настроив размер вашего дельта-блока:
-B, --block-size=BLOCKSIZE
Это заставляет блок размер, используемый в алгоритме дельта-передачи rsync, к фиксированному значению. Обычно он выбирается в зависимости от размера каждого обновляемого файла. См. технический отчет для деталей.
А если вам нужна дополнительная информация о самом алгоритме, вы можете найти ее здесь: Алгоритм Rsync
Я не знаком с Nagios и его работой, но если он принимает только один код выхода за раз, вам нужно немного изменить ваш сценарий и запустить его несколько раз.
output=$(head -1 file) # read first line
sed -i -e '1,1d' file # delete the first line
STATE=$(echo $output)
if [ $STATE == "OFFLINE" ]; then
echo "CRITICAL: STATE is $STATE"
exit 2
else
echo "OK " > /dev/null
fi
Если вы можете запустить этот сегмент несколько раз, вы получите несколько кодов выхода.