Ejecutar un trabajo launchd después de la copia de seguridad de Time Machine

4

En pocas palabras, tengo un proceso que se activa con launchd pero actualmente se ejecuta una vez por hora, sin embargo, lo que realmente me gustaría hacer es ejecutarlo una vez que se haya completado la copia de seguridad de Time Machine.

Inicialmente, pensé que solo podía configurar mi copia de seguridad de Time Machine (/Volumes/Foo/Backups.backupdb/Haravikk's Mac) como una ruta de observación para launchd, sin embargo, esto parece activarse demasiado pronto. Parece que vuelve a activarse cerca del final, por lo que actualmente estoy usando un retraso y luego comprobando la existencia de una copia de seguridad .inprogress, pero no es realmente una solución ideal, y algunas veces la etapa de limpieza de Time Machine desencadenará el proceso varias veces .

¿Puedo ver una ruta más específica que activará mi proceso solo cuando Time Machine haya finalizado una copia de seguridad?

Comprendo que debo realizar mis comprobaciones de todas formas para estar seguro, pero actualmente mi proceso se está activando varias veces por copia de seguridad, que no es lo que quiero.

    
pregunta Haravikk 04.11.2013 - 12:31

2 respuestas

3

Bien, después de configurar un agente de inicio para registrar información por un tiempo, he encontrado una solución combinada.

En pocas palabras, creé un agente de lanzamiento que mira las actualizaciones del archivo com.apple.TimeMachine.plist en busca de "-as":

 <?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 (durante la etapa de limpieza / finalización, creo). Teniendo esto en cuenta, es posible invocar un script con la ruta de observación anterior que verifica si backupd todavía 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 de rsync a 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 los disparadores de manera confiable después de que se complete una copia de seguridad, pero esto debería ejecutarse lo suficientemente cerca del final de una copia de seguridad como para útil.

    
respondido por el Haravikk 11.11.2013 - 19:29
3

Una solución simple es usar el comando tmutil para activar manualmente la copia de seguridad y hacer un seguimiento del proceso (como parte de un script de shell que realiza estos dos pasos).

  • Primero, desactive las copias de seguridad automáticas desde Preferencias del sistema > Time Machine o usando el comando tmutil disable
  • Utilice tmutil startbackup --auto --block para activar una copia de seguridad una vez cada hora (se requiere la opción --block para hacer que la ejecución espere hasta que finalice la copia de seguridad)
  • Sigue esto con el inicio de tu proceso

Consulte man tmutil para obtener más información sobre usando Time Machine desde la línea de comando.

    
respondido por el M K 04.11.2013 - 13:30

Lea otras preguntas en las etiquetas