Удаленный путь для мониторинга изменений
Я создал простой скрипт, основанный на инструментах 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, но я не знаю о других устройствах.)