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@