Сценарий Bash для копирования исходного каталога в два целевых каталога, проверки и удаления источника в случае успеха.

ОС: горный лев OSX

Я пытаюсь написать скрипт, который делает следующее

  • Проверьте, существует ли файл 1 в месте назначения 1 (bitcasa), если он существует, скопируйте исходную папку в место назначения 1, если файл не существует, найдите процесс bitcasa и уничтожьте его, затем подождите 60 секунд, затем запустите bicasa. попробуйте еще раз (цикл?) #bitcasa иногда перестает работать, и ее нужно перезапустить.
  • Проверьте, существует ли файл 2 в месте назначения 2 (общий ресурс nfs), если он существует, скопируйте исходную папку в место назначения 1, если файл не существует, попробуйте смонтировать общий ресурс nfs. попробуй еще раз (цикл?)
  • проверить скопированные файлы, если файлы скопированы успешно удалить исходные файлы

  • Я хочу, чтобы скрипт пытался выполнить несколько попыток, если он пропингует хост NAS, он должен сдаться и попробовать в следующий раз, когда скрипт запустится. Я хочу запускать скрипт каждые 2 часа. Шов crontab был удален в горном льве.

Когда я записываю это, я понимаю, что это немного сложнее, чем я думал сначала.

Во-первых, что касается монтирования общего ресурса nfs, в OSX, если вы извлекаете смонтированный общий ресурс nfs, папка в /Volumes удаляется. Каков наилучший способ убедиться, что общий ресурс nfs, который я всегда монтировал, если nas доступен? Это может быть обработано вне сценария? Если я вручную смонтирую общий ресурс nfs, мне нужно будет создать /Volumes/media, и это приведет к тому, что если я использую графический интерфейс для монтирования, общий ресурс будет использовать /Volumes/media-1/sins /Volumes/media vill уже существует.

Что касается убийства процесса по имени sins, я не могу знать PID, я пробовал с помощью команды linux, которую нашел: kill ps -ef | grep bitcasa | grep -v grep | awk ‘{print $2}’ это не сработало.

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

Я начал с этого (не проверено)

    #check if bitcasa is running (if file exist)
    if [ -f /Volumes/Bitcasa\ Infinite\ Drive/file.ext ]
    then
    rsync -avz /Users/username/source /Volumes/Bitcasa\ Infinite\ Drive/destination/
       else
       #Bitcasa might have stopped, check if process i running, kill if it is, then start bitcasa
    fi
    #Check if nfs share is mounted (if file exist)
    if [ -f /Volumes/media/file.ext ]
    then
    rsync -avz /Users/username/source /Volumes/media/
    fi
        else
        #nfs share (192.168.1.106:/media/) need to be mounted to /Volumes/media 

Я еще немного поработаю над этим сам, но знаю, что мне понадобится помощь.

Или я делаю этот способ сложным? может быть, программа резервного копирования может это сделать?


person Fredrik    schedule 02.03.2013    source источник


Ответы (1)


Для вашей проблемы kill ... ps вы можете использовать killall , который убивает все процессы с заданным именем

killall bitcasa

или см. man ps и используйте определяемый пользователем формат, упрощающий выбор

ps -o pid,comm | awk '/bitcasa/ { print $1; }' | xargs kill

Для NAS, если вы можете войти в него и установить rsync и ssh (или они уже установлены), вам не нужно ничего монтировать. Вы можете просто указать 192.168.1.106:/media/ в качестве места назначения для rsync, и rsync сделает все необходимое.

В любом случае, сначала проверьте и при необходимости смонтируйте, а затем запустите rsync, когда все настроено правильно, а не наоборот.

if [ ! -f "/Volumes/Bitcasa Infinite Drive/file.ext" ]; then
    # kill bitcasa, restart bitcasa
fi

rsync -avz /Users/username/source "/Volumes/Bitcasa Infinite Drive/destination/"

то же самое для нас

if [ ! -f "/Volumes/media/file.ext" ]; then
    # mount nas nfs share
fi

rsync -avz /Users/username/source "/Volumes/media/"

или если у вас есть rsync и ssh на вашем NAS, просто

rsync -avz /Users/username/source 192.168.1.106:/media/
person Olaf Dietsche    schedule 02.03.2013
comment
Спасибо. Конечно, я должен просто выполнить rsync с моим NAS и не заботиться о том, смонтирован он или нет. Сегодня продолжу работу над сценарием. - person Fredrik; 03.03.2013