0 votos

¿Existe alguna forma sencilla de programar automáticamente un movimiento de archivos que coincidan con un determinado patrón desde un directorio de usuario a una unidad USB?

Quiero automatizar un proceso de copia de seguridad que consiste en transportar archivos de copia de seguridad (con nombres del tipo "*.savf") primero a un Mac Mini (que ejecuta Yosemite) y, una vez en el Mini, moverlos desde donde se colocaron inicialmente a unidades USB externas. Este es un proceso que antes se ejecutaba en una caja Linux muy grande, muy ruidosa y muy desgastada.

De momento, me llegan los archivos al Mini. Pero, ¿alguien puede indicarme una forma fácil de automatizar el traslado a las unidades externas?

Si quieres detalles, aquí los tienes:

Los dos equipos externos de los que se realiza la copia de seguridad (AS/400, de ahí las extensiones "SAVF"), bien todas las noches a una hora determinada, o bien cuando se les indica que se apaguen, ejecutarán un programa que comprueba las bibliotecas especificadas para ver si hay algo en ellas que necesite copia de seguridad. Si una biblioteca necesita una copia de seguridad, se guardará en una construcción específica de AS/400 denominada "archivo de copia de seguridad" y, a continuación, se enviará por FTP al servidor de copias de seguridad (cada uno tiene su propia cuenta en el servidor de copias de seguridad, con su propio directorio principal).

En el servidor de copia de seguridad Linux, porque no podía encontrar una manera para que el FTP directamente a las unidades externas, había un shell script, que se ejecuta como un trabajo cron, bajo la autoridad Root, que copia los archivos de guardar en las unidades externas, a continuación, los elimina de los directorios de inicio.

La primera parte funciona muy bien en el Mac. No estoy seguro de cómo hacer que la segunda parte funcione.

5/8/2023: Acabo de realizar con éxito la ingeniería inversa de mi propio shell script:

#!
cd /Users/foo
cp *.savf /Volumes/BACKUP/foo
mv *.savf /Volumes/BACKUP2/foo

cd /Users/bar
cp *.savf /Volumes/BACKUP/bar
mv *.savf /Volumes/BACKUP2/bar

Ahora, para hacer que se ejecute a una hora específica del día, bajo la autoridad de Root, e ignorar todos los errores. . .

**** 10 de mayo ****

Ahora tengo un plist en /Library/LaunchDaemons (puesto ayer por la tarde), ¡PERO NO FUNCIONÓ! Se llama "sweep.plist", y es como sigue:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>sweep</string>
<key>Program</key>
<string>/Users/europa/sweep.sh</string>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</dict>
</plist>

E hice un launchctl load /Library/LaunchDaemons/sweep.plist (ya sea sudo'd o en un bash sudo) una vez que estaba en su lugar. Estoy absolutamente seguro de que después de que lo hice ayer, "barrido" apareció en un launchctl list pero no se ejecutó, y ya no aparece cuando hago un launchctl list .

¿Alguna idea de dónde buscar el problema?

Novedad: Acabo de comprobar el registro del sistema, y encontré esto: May 10 08:00:05 Europas-Mac-mini com.apple.xpc.launchd[1] (sweep[1299]): Program specified by service is not a Mach-O executable file.

Mirando el shell script con un ls -l muestra los permisos como -rwxr-xr-x@

3voto

Steve Evans Puntos 155

Lanzamientod

Apple proporciona launchd con MacOS para gestionar demonios y otros procesos en segundo plano, incluyendo scripts :

Gestión de script con launchd en Terminal en Mac.

El proceso launchd es utilizado por MacOS para gestionar dæmons y agentes, y puedes utilizarlo para ejecutar tus shell scripts. No se interactúa con launchd directamente; en su lugar se utiliza el comando launchctl para cargar o descargar dæmons y agentes launchd.

cron

cron sigue estando disponible en MacOS y es una opción válida para ejecutar su script según una programación. Apple ha dejado de utilizar cron a favor de launchd . La herramienta está obsoleta porque cron no se considera eficiente desde el punto de vista energético.

Sin embargo, cron funciona y es fiable.

Terceros

Si prefiere utilizar una herramienta de terceros para programar su script, dispone de muchas opciones, entre ellas:

Gestor de energía

Soy un ingeniero detrás de Power Manager, que es una herramienta que puede ejecutar su shell script como Root.

Los dos enlaces siguientes muestran dos enfoques diferentes - uno con un script externo, el otro con un script en línea:

Power Manager on macOS - run a script daily as root

0voto

hbquikcomjamesl Puntos 51

Hoy temprano, encontré algo: https://stackoverflow.com/a/39062525/3654526

Parece que una vez que cambié el shebang genérico a uno especificando un shell (de #! a #!/bin/bash ) y cambié la hora a la que se supone que se ejecuta el script, funcionó.

Lamentablemente, también descubrí que la desconexión espontánea de la unidad USB no se debía sólo a que la caja se fuera a dormir: parece que la unidad está empezando a escamarse, y que el hecho de que la caja se fuera a dormir era sólo un desencadenante. Es hora de jubilar el Seagate y comprar un disco nuevo. Por otra parte, por eso hago copias de seguridad en dos unidades USB distintas.

0voto

WGroleau Puntos 255

Para algo tan simple como esto, me quedo con la manera antigua.

En primer lugar, ya que desea que se haga como Root, sudo sh o sudo bash o sudo zsh según sus preferencias.

Entonces, crontab -e para editar un crontab con vim. man 5 crontab indica el formato que necesitas. Básicamente,

17  4  *  *  *  /usr/local/bin/rsync -av /Users/foo/ /Volumes/BACKUP/foo
23  4  *  *  *  /usr/local/bin/rsync -av /Users/foo/ /Volumes/BACKUP2/foo

hará, ar 04:17 y 04:23, mover todo en /Users/foo al otro a menos que ya esté allí. La barra en /Users/foo es importante. Sin ella, creará /Volumes/BACKUP/foo/foo En otras palabras,

/usr/local/bin/rsync -av /Users/foo/ /Volumes/BACKUP/foo
and
/usr/local/bin/rsync -av /Users/foo /Volumes/BACKUP

hacer exactamente lo mismo. man rsync para más detalles.

launchd tiene muchas más capacidades que cron, pero cuando no necesito las mejoras, vuelvo al método "arcaico" más sencillo.

rsync copia sólo lo que falta o ha cambiado, así que si sospechas que hay algún fallo, puedes repetirlo una hora más tarde y no desperdiciará ancho de banda repitiendo lo que ya se ha copiado:

17 4,5 * * * /usr/local/bin/rsync -av /Users/foo/ /Volumes/BACKUP/foo

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