Ejecute un trabajo de lanzamiento después de la copia de seguridad de Time Machine

En pocas palabras, tengo un proceso que se activa launchdpero 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.

Respuestas (2)

Una solución simple es usar el tmutilcomando para activar manualmente la copia de seguridad y seguirla con su proceso (como parte de un script de shell que realiza ambos pasos).

  • Primero, desactive las copias de seguridad automáticas desde Preferencias del Sistema > Time Machine o usando el comandotmutil disable
  • Úselo tmutil startbackup --auto --blockpara activar una copia de seguridad una vez cada hora (la --blockopción es necesaria para hacer que la ejecución espere hasta que finalice la copia de seguridad)
  • Siga esto con el lanzamiento de su proceso

Consulte man tmutil para obtener más información sobre el uso Time Machinedesde la línea de comandos.

Eso sería ideal, y tal vez podría hacerlo funcionar, pero realmente esperaba poder hacer que mi secuencia de comandos fuera una adición "inmediata", dejando que Time Machine funcione normalmente (simplemente no quiero estar ejecutándose en el Mismo tiempo). ¿Existe tal vez una forma de estar atento a backupdla ejecución y simplemente esperar hasta que finalice antes de ejecutar mi script?
Acabo de intentar crear y ejecutar un programa contenedor para backupd, pero se ejecuta una vez cada 10 segundos y sale. Por lo tanto, el seguimiento backupdno es útil.

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.plistarchivo 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 backupdaún se está ejecutando; si es así, la secuencia de comandos duerme durante un minuto y vuelve a comprobar, repitiendo hasta que backupdhaya 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 rsyncde 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.