Führen Sie nach der Time Machine-Sicherung einen launchd-Job aus

Ganz einfach, ich habe einen Prozess, der ausgelöst wird, launchdaber derzeit einmal pro Stunde ausgeführt wird, aber eigentlich möchte ich, dass er ausgeführt wird, sobald eine Time Machine-Sicherung abgeschlossen ist.

Anfangs dachte ich, ich könnte einfach mein Time Machine-Backup (/Volumes/Foo/Backups.backupdb/Haravikk's Mac) als Überwachungspfad für launchd festlegen, aber das scheint viel zu früh auszulösen. Es scheint gegen Ende wieder auszulösen, also verwende ich derzeit eine Verzögerung und überprüfe dann, ob ein .inprogress-Backup vorhanden ist, aber es ist nicht wirklich eine ideale Lösung, und manchmal löst die Bereinigungsphase von Time Machine den Prozess mehrmals aus .

Gibt es einen spezifischeren Pfad, den ich beobachten könnte, der meinen Prozess nur auslöst, wenn Time Machine ein Backup abgeschlossen hat?

Mir ist klar, dass ich meine Überprüfungen sowieso durchführen sollte, um sicherzugehen, aber derzeit wird mein Prozess mehrmals pro Sicherung ausgelöst, was nicht das ist, was ich möchte.

Antworten (2)

Eine einfache Lösung besteht darin, den Befehl zu verwenden tmutil, um das Backup manuell auszulösen und es mit Ihrem Prozess zu verfolgen (als Teil eines Shell-Skripts, das diese beiden Schritte ausführt).

  • Deaktivieren Sie zunächst automatische Sicherungen in den Systemeinstellungen > Time Machine oder verwenden Sie den Befehltmutil disable
  • Verwenden Sie tmutil startbackup --auto --blockdiese Option, um einmal pro Stunde eine Sicherung auszulösen (die --blockOption ist erforderlich, damit die Ausführung warten muss, bis die Sicherung abgeschlossen ist).
  • Folgen Sie dem, indem Sie Ihren Prozess starten

Weitere Informationen zur Verwendung über die Befehlszeile finden Sie unter man tmutil .Time Machine

Das wäre ideal, und ich könnte es vielleicht zum Laufen bringen, aber ich hatte wirklich gehofft, mein Skript zu einer "Drop-In" -Ergänzung machen zu können, so dass Time Machine normal funktioniert (ich möchte nur nicht am laufen gleiche Zeit). Gibt es vielleicht eine Möglichkeit, auf das Ausführen zu achten backupdund einfach zu warten, bis es beendet ist, bevor ich mein Skript ausführe?
Ich habe gerade versucht, ein Wrapper-Programm für zu erstellen und auszuführen backupd, aber es wird alle 10 Sekunden einmal ausgeführt und beendet. Eine Überwachung ist also backupdnicht sinnvoll.

Okay, nachdem ich einen Startagenten eingerichtet habe, um Informationen für eine Weile zu protokollieren, habe ich eine kombinierte Lösung entwickelt.

Ganz einfach, ich habe einen Launch-Agent erstellt, der die com.apple.TimeMachine.plistDatei auf Updates wie folgt überwacht:

 <?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>

Diese Datei wird jedes Mal aktualisiert, wenn Time Machine eine Sicherung durchführt, und läuft gegen Ende (ich glaube, während der Aufräum-/Beendigungsphase). Vor diesem Hintergrund ist es möglich, ein Skript mit dem obigen Überwachungspfad aufzurufen, das überprüft, ob backupdes noch läuft. Wenn dies der Fall ist, schläft das Skript eine Minute lang und überprüft es erneut, wiederholt es, bis backupdes fertig ist, bevor es mit dem fortfährt, was es tun muss.

Dadurch können jetzt Post-Backup-Aktionen ausgelöst werden, z. B. das Durchführen sekundärer Backups (in meinem Fall über rsyncein NAS), das Überprüfen der Größe des letzten Backups und andere praktische Dinge.

Wie auch immer, diese Lösung scheint der beste Weg zu sein, da ich keinen zu beobachtenden Pfad finden konnte, der nach Abschluss einer Sicherung zuverlässig ausgelöst wird, aber dies sollte nahe genug am Ende einer Sicherung ausgeführt werden, um nützlich zu sein.