Страница 1 из 1

Запись файла одновлеменно в два места

Добавлено: 01 янв 2010 19:43
VerstaK
Встала задача постоянного резервного копирования каталога фтп-сервера. Копирование раз в минуту не подходит - юзвери могут за эту минуту поудалять файлы. А ограничивать в правах на удаление - тоже нельзя, поскольку каталог фтп они чистят, чтобы не было помойки и путаницы.
интересуюсь - можно ли как-нибудь организовать постоянное копирование? Не раз в минуту, хотя бы секунд в 5-10 смотреть, есть ли изменения и если есть - синхронизировать каталоги.


P.S. Второй вопрос организовался - никто не подскажет, каким образом в proftpd можно организовать оповещение о подключении/закачке файла звуковом? Подключился пользоватьель - бип. Закончил заливать файл -бип.

Re: Запись файла одновлеменно в два места

Добавлено: 01 янв 2010 21:19
hatred
Если честно - дикая задача... ну если так нужно, то стоит попробовать покурить в направлении:
подробного логирования ftp-сервера, при закачке файла вызывать хук (скрипт) который будет делать жесткую ссылку на файл (если в пределах одной файловой системы - будет очень быстро, а файл физически не уничтожится, пока все хардлинки на него не будут удалены).

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

Названия программ которые стоит пглядеть: inotail, inotify-tools

так же при помощи команд из пакета inotify-tools можно рекурсивно следить за изменением в дереве каталогов: создание файлов, подкаталогов, открытие их на чтение, запись и т.п.

А вот дальше - фантазия) Например такая:

Код: Выделить всё

#!/bin/bash

ftp_dir="/tmp/ino/"
backup_dir="/tmp/backup/"

inotifywait -m -r $ftp_dir | while read line
do
	echo $line
	tst=`echo $line | grep CLOSE_WRITE`
	if [ -n "$tst" ]; then
		dir=`echo $line  | cut -d ' ' -f 1`
		file=`echo $line | cut -d ' ' -f 3`

		echo "==> $dir/$file"

		if [ ! -d "$backup_dir/$dir" ]; then
			mkdir -p $backup_dir/$dir
		fi

		cp $dir/$file $backup_dir/$dir
	fi
done
Если нужно смотри какие там действия происходят, на нужные делай свои какие-то манипуляции - на экране в общем наблюдай. Не знаю как на большой нагрузке будет себя вести, ннноооооо. Можно, почитая man, отфильтровывать только нужные события и не делать tst=`...` коде скрипта.

Re: Запись файла одновлеменно в два места

Добавлено: 04 янв 2010 10:29
Лимон
Читая "постановку задачи", хотел было уже мимо пройти, но прочитав ПыСЫ, меня осенило! Верстак в армии служит! Я представляю, как, бип, рядовой Иванов докладывает ... Не, а че? Мы же в толксах! Да?
История про пользователя, удаляющего файлы, не похожа на резервное копирование, да и резервное копирование бывает разное и само по себе нужно только для резюме. Тебе зачем это нужно?

Re: Запись файла одновлеменно в два места

Добавлено: 04 янв 2010 13:27
hatred
Лимон писал(а):Не, а че? Мы же в толксах! Да?
ты уже раскурил сопряжение форума с рассылкой? Хотя...

Re: Запись файла одновлеменно в два места

Добавлено: 05 янв 2010 14:56
Лимон
hatred писал(а):ты уже раскурил сопряжение форума с рассылкой? Хотя...
нет. я думал-думал и устал. это тебе не толксы языком ворочать.
выгоды нет.
на будущее, создавай отдельные темы ;)

Re: Запись файла одновлеменно в два места

Добавлено: 06 янв 2010 08:07
rpk
VerstaK писал(а): Не раз в минуту, хотя бы секунд в 5-10 смотреть, есть ли изменения и если есть - синхронизировать каталоги.
Ну дык если часы имеются и исправны - раз в 5-10 секунд проверяешь не были ли за это время созданы новые файлы, если были - либо копируешь куда надо, либо делаешь харлинк на них. Запустить из того же скрипта что и ftp сервак пускается. ничего собственно сложно и интересно нету.