Крон и rsync использование файла блокирует, но есть ли на Сервере Mac OS X лучший путь?

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

Я повторил эту процедуру каждой базы данных.

  1. Созданный уникальное название схемы базы данных.

  2. Выполнил следующий запрос для каждой таблицы в базе данных:

    ALTER SCHEMA [new_schema_name] TRANSFER [table_name];

  3. Используемый SSMS для генерации CREATE сценарии для всех представлений, хранимые процедуры, триггеры и функции. (К счастью, у меня были немногие из них, таким образом, это пошло быстро.) Я действительно должен был добавить название схемы ко всей таблице refereces (например. [dbo].[table_name] измененный на [new_schema_name].[table_name] но поиск и замена сделали это быстрым и легким.

  4. Используемый Импорт SQL Server и Мастер Экспорта для экспортирования таблицы от базы данных до основной базы данных.

  5. Работал CREATE сценарии и удаленный старая база данных.

6
задан 22 February 2011 в 12:10
2 ответа

При помещении PID сценария в файл блокировки затем если файл блокировки существует, когда новый экземпляр запускается, можно считать PID и проверить, работает ли сценарий все еще. Если сценарий не работает, затем моются, помещают PID текущего экземпляра в файле блокировки и запускаются, rsync иначе печатают 'все еще выполняющий' сообщение и выход.

Править:

#!/bin/bash
backup() {
    RSYNC=/usr/bin/rsync
    SSH=/usr/bin/ssh
    KEY=/Users/admin/Documents/Backup/rsync-key
    RUSER=philosophy
    RHOST=example.com
    RPATH=data/
    LPATH="/Volumes/G Technology G Speed eS/Backup"

    $RSYNC -avz --delete --progress -e "$SSH -i $KEY" "$LPATH" $RUSER@$RHOST:$RPATH
}

LOCKFILE=/Users/admin/Documents/backup.isrunning

if [ ! -e "$LOCKFILE" ]
then
    echo $$ >"$LOCKFILE"
    backup
else
    PID=$(cat "$LOCKFILE")
    if kill -0 "$PID" >&/dev/null
    then
        echo "Rsync - Backup still running"
        exit 0
    else
        echo $$ >"$LOCKFILE"
        echo "Warning: previous backup appears not to have finished correctly"
        backup
    fi
fi

rm -f "$LOCKFILE"
4
ответ дан 3 December 2019 в 00:33

Если вы настраиваете несколько резервных копий, вы можете взглянуть на LBackup , который предлагает блокировку, а также полностью поддерживает резервное копирование по запросу. Дополнительную информацию о преимуществах резервного копирования по запросу можно получить по следующему URL-адресу: http://www.lbackup.org/network_backup_strategies

Если вы проверите исходный код LBackup, вы увидите, как реализована система блокировки с использованием ловушка. Вышеупомянутое предложение относительно использования PID также является хорошей идеей. При таком подходе, если весь сервер выйдет из строя и ловушка не будет активирована.

1
ответ дан 3 December 2019 в 00:33

Теги

Похожие вопросы