En pocas palabras, tengo un proceso que se activa launchd
pero actualmente se ejecuta una vez por hora, sin embargo, lo que realmente me gustaría que hiciera es ejecutar una vez que se haya completado una copia de seguridad de Time Machine.
Inicialmente, pensé que podría configurar mi copia de seguridad de Time Machine (/Volumes/Foo/Backups.backupdb/Haravikk's Mac) como una ruta de observación para el lanzamiento, sin embargo, esto parece activarse demasiado pronto. Parece que se activa nuevamente cerca del final, por lo que actualmente estoy usando un retraso y luego verifico la existencia de una copia de seguridad .inprogress, pero en realidad no es una solución ideal y, a veces, la etapa de limpieza de Time Machine activará el proceso varias veces. .
¿Hay alguna ruta más específica que pueda ver que active mi proceso solo cuando Time Machine haya terminado una copia de seguridad?
Me doy cuenta de que debo realizar mis comprobaciones de todos modos para estar seguro, pero actualmente mi proceso se activa varias veces por copia de seguridad, que no es lo que quiero.
Una solución simple es usar el tmutil
comando para activar manualmente la copia de seguridad y seguirla con su proceso (como parte de un script de shell que realiza ambos pasos).
tmutil disable
tmutil startbackup --auto --block
para activar una copia de seguridad una vez cada hora (la --block
opción es necesaria para hacer que la ejecución espere hasta que finalice la copia de seguridad)Consulte man tmutil para obtener más información sobre el uso Time Machine
desde la línea de comandos.
Bien, después de configurar un agente de lanzamiento para registrar información durante un tiempo, se me ocurrió una solución combinada.
Sencillamente, creé un agente de lanzamiento que observa el com.apple.TimeMachine.plist
archivo en busca de actualizaciones de esta manera:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.example.backupd</string>
<key>ProgramArguments</key>
<array>
<string>do something</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/com.apple.TimeMachine.plist</string>
</array>
</dict>
</plist>
Este archivo se actualiza cada vez que Time Machine realiza una copia de seguridad y se ejecuta hacia el final (creo que durante la etapa de limpieza/finalización). Con esto en mente, es posible invocar un script con la ruta de observación anterior que verifica si backupd
aún se está ejecutando; si es así, la secuencia de comandos duerme durante un minuto y vuelve a comprobar, repitiendo hasta que backupd
haya terminado, antes de continuar con lo que sea necesario.
Esto ahora permite que se activen acciones posteriores a la copia de seguridad, como realizar copias de seguridad secundarias (en mi caso a través rsync
de un NAS), verificar el tamaño de la última copia de seguridad y otras cosas útiles.
De todos modos, esta solución parece ser la mejor manera de hacerlo, ya que no pude encontrar ninguna ruta para ver que se active de manera confiable después de que se completa una copia de seguridad, pero esto debería ejecutarse lo suficientemente cerca del final de una copia de seguridad para ser útil.
Haravikk
backupd
la ejecución y simplemente esperar hasta que finalice antes de ejecutar mi script?MK
backupd
, pero se ejecuta una vez cada 10 segundos y sale. Por lo tanto, el seguimientobackupd
no es útil.