verifique si el almacenamiento está disponible y si se ejecuta una rutina de respaldo con frase de contraseña

0

Instalé el programa de copia de seguridad restic con homebrew y probé su rendimiento. Es genial. Así que me gustaría configurar una rutina automatizada. Intenté hacerlo en Automator con un flujo de trabajo, pero debido a la verificación de la contraseña se cancela. Tal vez usted resuelva diferente, por favor hágamelo saber ...

Lo que estoy tratando de obtener:

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

lo que he intentado:

    
pregunta novski 08.02.2017 - 09:06

1 respuesta

1

Los pasos 1, 2 y 4 son relativamente sencillos y se pueden realizar utilizando launchd (o cron ) para llamar a un script.

Mi solución implica una configuración, tomada de esta publicación de blog :

Abra Keychain Access ( Espacio Keychain Access ), haga clic en Password , luego + para crear una nueva contraseña. Usuario restic para el Keychain Item Name y para el Account Name . Ingrese la contraseña que pretende usar en el campo Password (es decir, ingrese la misma contraseña que usó cuando ejecutó restic init ). Finalmente, haga clic en Add para completar el proceso de configuración.

    El trabajo
  1. launchd (o cron ) se ejecuta cada 24 horas y simplemente llama a un script de shell restic-backup.sh

  2. restic-backup.sh comprueba si /Volumes/usb-storage-name está montado y se detiene si no lo está. Si la unidad está montada, verifica la existencia del directorio /Users/user/data y se detiene si el directorio no existe (¡no puede hacer una copia de seguridad de un directorio que no existe!) Si el volumen de copia de seguridad está montado y el directorio de origen existe, luego pasa al paso 3 ...

  3. Si la variable de entorno RESTIC_PASSWORD está establecida, Restic usará su valor en lugar de solicitando una contraseña . restic-backup.sh establecerá RESTIC_PASSWORD usando el comando security y algunos 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 establecido, el script ahora puede ejecutar la copia de seguridad:

    restic -r /Volumes/usb-storage-name/restic-backups backup /Users/user/data
    
  4. El trabajo launchd / cron del paso 1 debe ejecutarse cada 24 horas, cubriendo el paso 4 también.

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}"
    
respondido por el John N 08.02.2017 - 11:31

Lea otras preguntas en las etiquetas