2012-01-28 1 views
1
  1. Каждый час основная машина занимает минуту, чтобы создать файл дампа около 100 МБ.
  2. Резервная копия копирует, используя scp, также почасово.
  3. Оба действия запускаются cron для запуска в те же минуты, прошедшие через час.
  4. Копия часто содержит только часть файла дампа.

Хотя я мог бы изменить cron на резервной машине, чтобы произойти через 5 минут, это скорее пахнет обманом.Как получить полную копию файла дампа, пока он еще создается?

Каков правильный способ решения этой проблемы?

+0

Если вам требуется минутка для захоронения, вы можете добавить сон для копирования команды. 'sleep 60 & copying.sh' –

ответ

1

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

1. Dumper deletes signal file 
2. Dumper dumps file 
3. Dumper creates signal file 
4. Backup program polls periodically until the signal file is created 
5. Backup program deletes signal file 
6. Backup program has complete file 

Не лучшая форма IPC а как его на другой машине ... Я полагаю, вы могли бы также открыть сетевое соединение, чтобы сделать опрос.

+0

Да, хорошее предложение. Я использую md5 файла дампа для моего сигнального файла. Я вынуждаю, по крайней мере, одну секунду задержки перед вычислением md5, тогда я могу проверить, закончен ли файл дампа, проверяя, является ли файл сигнала более новым, чем дамп. –

+0

Хорошее мышление - берет на себя проверку целостности на том же шаге. – ose

0

Очень быстро и очень грязно:

my_file=/my/filename 

while [[ -n "$(find $my_file)" -a -n "$(find $my_file -mmin -1)" ]] ; do 
    echo "File '$my_file' exists, but has been recently modified. Waiting..." 
    sleep 10 
done 

scp ...    # if the file does not exist at all, we don't wait for it, but let scp fail 
+0

Да, я немного потрудился из того, что вы предлагаете здесь, главным образом, для ожидания ожидания и проверки для сигнального файла - см. Мой комментарий к ответу ose. –

0

Попробуйте скопировать файл из основного узла к узлу резервного копирования в одном сценарии:

1. dumpfile 
2. scp 

Тогда это гарантировано, что файл закончен перед тем вызов scp.

+0

Я не хочу, чтобы главная машина нажала дамп на резервную копию. Я просто хочу, чтобы резервная машина пыталась сбрасывать свалки. Таким образом, основной машине не нужно знать, куда идут резервные копии. –

+0

Для 'tack' читайте 'take'. –

2

Кредиторское задолженность fuser для определения, используется ли файл; что-то вроде:

#!/bin/sh 
MYFILE=myfile #...change as necessary 
while true 
do 
    if [ -z "$(/sbin/fuser ${MYFILE} 2> /dev/null)" ]; then 
     break 
    fi 
    echo "...waiting..." 
    sleep 10 #...adjust as necessary 
done 
echo "Process the file..." 
+0

Хорошо, хорошее предложение, я не знал о термофиксаторе. –

+0

Thanks; голосов тоже приветствуются :-) – JRFerguson

Смежные вопросы