controlla se la memoria è disponibile e se è in esecuzione una routine di backup con passwordphrase

0

ho installato il programma di backup restio con homebrew e testato le sue prestazioni. È ottimo. Quindi mi piacerebbe impostare una routine automatizzata. Ho provato a farlo in automator con un flusso di lavoro, ma a causa della verifica della password si interrompe. Forse potresti risolvere diversi per favore fammi sapere ...

Cosa sto cercando di ottenere:

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...

quello che ho provato:

    
posta novski 08.02.2017 - 09:06
fonte

1 risposta

1

I passaggi 1, 2 e 4 sono relativamente semplici e possono essere eseguiti utilizzando launchd (o cron ) per chiamare uno script.

La mia soluzione implica alcune impostazioni, prese da questo post del blog :

Apri Keychain Access ( Spazio Keychain Access ), fai clic su Password , quindi su + per creare una nuova password. Utente restic per Keychain Item Name e per Account Name . Inserisci la password che intendi utilizzare nel campo Password (ad esempio, inserisci la stessa password che hai utilizzato quando hai eseguito restic init ). Infine, fai clic su Add per completare la procedura di configurazione.

    Il processo
  1. launchd (o cron ) viene eseguito ogni 24 ore e chiama semplicemente uno script di shell restic-backup.sh

  2. restic-backup.sh controlla se /Volumes/usb-storage-name è montato e si ferma se non lo è. Se l'unità è montata, verifica l'esistenza della directory /Users/user/data e si blocca se la directory non esiste (non può eseguire il backup di una directory inesistente!) Se il volume di backup è montato e la directory di origine Esiste quindi passa al passaggio 3 ...

  3. Se la variabile di ambiente RESTIC_PASSWORD è impostata su Restic userà il suo valore invece di richiesta di una password . restic-backup.sh imposterà RESTIC_PASSWORD usando il comando security e alcuni ruby magic:

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

    Con RESTIC_PASSWORD impostato lo script ora può eseguire il backup:

    restic -r /Volumes/usb-storage-name/restic-backups backup /Users/user/data
    
  4. Il processo launchd / cron del passaggio 1 deve essere eseguito ogni 24 ore, coprendo anche il passaggio 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}"
    
risposta data 08.02.2017 - 11:31
fonte

Leggi altre domande sui tag