перевірте, чи доступне сховище та чи виконується процедура резервного копіювання за допомогою парольної фрази


0

Я встановив рестик-програму резервного копіювання з домашньою мовою і перевірив її продуктивність. Це чудово. Тому я хотів би створити автоматизовану процедуру. Я намагався зробити це в автоматизаторі з робочим процесом, але через перевірку пароля він припиняє. Можливо, ви вирішите вирішити різні, будь ласка, дайте мені знати ...

Що я намагаюся отримати:

1. check if storage is available (usb storage attached)
2. execute restic -r /Volumes/usb-storage-name/restic-backups backup /Users/user/data
3. prompt the encryption key (or get it from keychain account restic?)
4. check again a day later...

що я спробував: введіть тут опис зображення

Відповіді:


1

Етапи 1, 2 і 4 є відносно простими і можуть бути виконані за допомогою launchd(або cron) для виклику сценарію.

Моє рішення передбачає деякі налаштування, взяті з цієї публікації в блозі :

Відкрийте Keychain Access( Space Keychain Access), натисніть Password, а потім +створити новий пароль. Користувач resticдля Keychain Item Nameі для Account Name. Введіть пароль у Passwordполі (тобто введіть той самий пароль, який ви використовували, коли ви бігли restic init). Нарешті, натисніть, Addщоб завершити процес налаштування.

  1. launchd(або cron) робота працює кожні 24 години і просто викликає сценарій оболонкиrestic-backup.sh

  2. restic-backup.shперевіряє, якщо /Volumes/usb-storage-nameвін встановлений, і зупиняє, чи ні. Якщо диск встановлений, він перевіряє наявність /Users/user/dataкаталогу і зупиняється, якщо каталог не існує (він не може створити резервну копію неіснуючого каталогу!) Якщо том резервного копіювання встановлено, а вихідний каталог його існує, переходимо до кроку 3 ...

  3. Якщо встановлена ​​змінна середовище RESTIC_PASSWORD, Restic використовуватиме її значення замість запиту пароля . restic-backup.shвстановимо RESTIC_PASSWORDза допомогою securityкоманди та деякої rubyмагії:

    RESTIC_PASSWORD=$(security 2>&1 >/dev/null find-generic-password -ga restic |ruby -e 'print $1 if STDIN.gets =~ /^password: "(.*)"$/')

    З RESTIC_PASSWORDнабором сценарію тепер можна виконати резервну копію:

    restic -r /Volumes/usb-storage-name/restic-backups backup /Users/user/data
  4. launchd/ Завдання cronз кроку 1 має виконуватися кожні 24 години, охоплюючи також етап 4.

restic-backup.sh:

#!/bin/bash

# USER CONFIGURATION:    
resticuser=restic
srcdir=/Users/user/data
backupvolume=/Volumes/usb-storage-name
backupdir=${backupvolume}/restic-backups

# Script vars:
longname=$0
shortname=$(/usr/bin/basename "${longname}")

printf '%s %s (%s) running...\n' "$(date -u "+%Y-%m-%d %H:%M:%S")" "${shortname}" "${longname}"

if [[ ! -d "${srcdir}" ]]; then
    printf '%s %s does NOT exist.' "$(date -u "+%Y-%m-%d %H:%M:%S")" "${srcdir}" >&2
    exit 1
else
    if [[ $(mount | grep "${backupvolume}") ]]; then
        # See: http://blog.macromates.com/2006/keychain-access-from-shell/
        # Parse output of 'security' and set RESTIC_PASSWORD:
        export RESTIC_PASSWORD=$(security 2>&1 >/dev/null find-generic-password -ga ${resticuser} |ruby -e 'print $1 if STDIN.gets =~ /^password: "(.*)"$/')
        # Run backup, capturing output in case of error:
        output=$(restic -r ${backupdir} backup "${srcdir}")
        error=$?
        if [[ "${error}" == "0" ]]; then
            printf '%s Restic backup completed successfully.\n' "$(date -u "+%Y-%m-%d %H:%M:%S")"
        else
            printf '%s Restic backup failed: error code: %s, error: %s\n' \
                    "$(date -u "+%Y-%m-%d %H:%M:%S")" "${error}" "${output}" >&2
        fi
    else
        printf '%s %s is NOT mounted.' "$(date -u "+%Y-%m-%d %H:%M:%S")" "${backupvolume}" >&2
        exit 1
    fi
fi

printf '%s %s ended.\n' "$(date -u "+%Y-%m-%d %H:%M:%S")" "${shortname}"

Я перевірив це за допомогою жорсткого диска USB (і з набагато більш обширним веденням журналу) - помилки, можливо, потрапили до сценарію, коли я змінив власну конфігурацію користувача та вирвав балаканий журнал. Повідомте мене, якщо у вас виникнуть проблеми. Я не перевіряв цього, launchdале міг би досить швидко зібрати разом, launchd plistякщо він вам потрібен.
Джон N

Ідеально! Що працює. Я поставив запитання тут: apple.stackexchange.com/questions/273557/… Можливо, ви можете мені допомогти в цьому додатку ...?
novski
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.