Удаленный путь для мониторинга изменений

Я создал простой скрипт, основанный на инструментах inotify, но, наконец, после того, как я решил мониторить /remotepath, который был смонтирован из NAS командой mount.cifs, он не работал.

Поэтому после некоторого расследования я нашел информацию, что inotify-tools не поддерживает удаленную папку.

Есть ли у кого-нибудь из вас опыт работы с простым инструментом, который даст мне возможность посмотреть удаленную папку и, если что-то изменится, запустит rsync.

Может быть, я должен идти только с rsync и синхронизировать удаленную папку только с новыми файлами?

Спасибо за любые идеи.

В то же время я создал простой скрипт bash, который делает то, что я хочу, но я борюсь с проблемой, что произойдет, если что-то будет удалено из папки назначения, и я не хочу снова синхронизировать этот удаленный файл. Есть идеи, как решить эту проблему?

#!/bin/bash

### Logs path
path="/var/log/compare"
log="compare.log"
listing1="listing1.log"
listing2="listing2.log"
### Path which will be monitored
destination="/path/to/destination/"
source="/path/to/remote/folder"


## Watching for content in source folder
ls -lh $source > $path/$listing1
### I`m checking if something was changed
        echo "$(date)" 'INFO' 'I will compare listing files' >> "$path/$log"
        if cmp -s "$path/$listing1" "$path/$listing2"
### Files are the same
        then
        echo "$(date)" 'INFO' 'Listings are the same' >> "$path/$log"
### Files are different
        else
        rsync -art $source $destination
        echo "$(date)" 'INFO' 'Finished synchronization' >> "$path/$log"
fi
cp $path/$listing1 $path/$listing2

1 ответ

inotify - действительно неподходящий инструмент для работы; он работает, перехватывая активность файловой системы в ядре, поэтому удаленная активность будет полностью пропущена.

Идеальным решением было бы запустить inotify на коробке NAS. Это, конечно, возможно с некоторыми устройствами, но вы не говорите, какое устройство у вас есть (и если бы вы это сделали, у меня, вероятно, нет того же).

Любой другой инструмент, который существует, будет делать именно то, что делает ваш скрипт (хотя, может быть, и более красиво), поэтому я не думаю, что вам нужно идти по этому пути.

В любом случае, ваш скрипт полностью избыточен! Если бы вы просто периодически запускали rsync, это делало бы то же самое (rsync -t просто сравнивает имена файлов, размеры и временные метки). Единственное отличие состоит в том, что rsync будет сравнивать список удаленных файлов с вашими реальными файлами, а не с кэшированной копией списка файлов. Между прочим, -a подразумевает как -r а также -t, так rsync -a достаточно.

Я хотел бы рассмотреть одну вещь: запуск rsync на устройстве NAS напрямую. Доступ к списку файлов через CIFS менее эффективен, чем его локальный запуск, поэтому, если ваш NAS может поддерживать rsync, сделайте это. (Ящики Synology NAS имеют rsync, но я не знаю о других устройствах.)

Другие вопросы по тегам