0 votos

comprobar si el almacenamiento está disponible y, si lo está, ejecutar una rutina de copia de seguridad con frase de contraseña

He instalado el programa de copia de seguridad restic con homebrew y probado su rendimiento. Es muy bueno. Así que me gustaría configurar una rutina automatizada. Traté de hacerlo en automator con un flujo de trabajo, pero debido a la comprobación de la contraseña se aborta. Tal vez usted podría resolver diferente por favor hágamelo saber...

Lo que estoy tratando de conseguir:

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 probado: enter image description here

1voto

John N Puntos 400

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

Mi solución implica un poco de configuración, tomada de esta entrada del blog :

Abrir Keychain Access ( Space Keychain Access ), haga clic en Password entonces + para crear una nueva contraseña. Usuario restic para el Keychain Item Name y para el Account Name . Introduzca la contraseña que pretende utilizar en el Password (es decir, introduzca la misma contraseña que utilizó cuando ejecutó restic init ). Por último, haga clic en Add para completar el proceso de configuración.

  1. launchd (o cron ) se ejecuta cada 24 horas y simplemente llama a un shell script 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, se comprueba la existencia del archivo /Users/user/data y se detiene si el directorio no existe (¡no puede hacer una copia de seguridad de un directorio inexistente!) Si el volumen de la copia de seguridad está montado y el directorio de origen existe, pasa al paso 3...

  3. Si la variable de entorno RESTIC_PASSWORD Restic utilizará su valor en lugar de solicitar una contraseña . restic-backup.sh se fijará RESTIC_PASSWORD utilizando el security y algunos ruby mágico:

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

    Con RESTIC_PASSWORD establecer el script puede ahora ejecutar la copia de seguridad:

    restic -r /Volumes/usb-storage-name/restic-backups backup /Users/user/data
  4. El launchd / cron El trabajo del paso 1 debe ejecutarse cada 24 horas, cubriendo también el paso 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}"

0 votos

He probado esto usando un disco duro USB (y con un registro mucho más extenso) - los errores pueden haberse colado en el script cuando cambié mi propia configuración de usuario y arranqué el registro del chat. Hazme saber si tienes problemas. No he probado esto con launchd pero podría reunir con bastante rapidez un launchd plist si lo necesitas.

0 votos

¡Perfecto! Eso funciona bien. Hice una pregunta de seguimiento aquí: apple.stackexchange.com/questions/273557/ ¿Quizás puedas ayudarme con este addon...?

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X