Gibt es einen Bash-Befehl, mit dem überprüft werden kann, ob die Sicherung von Time Machine abgeschlossen ist?

16

Ich schreibe ein Skript, das mein Time Machine-Verzeichnis mit ssh auf einen Remote-Server überträgt. Ich habe von einem Shell-Skript zu einem AppleScript und dann zurück zu einem Apple-Skript gewechselt und es ist mir egal, welche Art von Skript die Lösung benötigt.

Ich hatte Erfolg beim Starten des Sicherungsvorgangs mit diesem kleinen Codefragment.

do shell script "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper >/dev/null 2>&1 &"

Ich versuche jetzt, einen rsync-Befehl auszuführen, sobald die Sicherung abgeschlossen ist. Gibt es in AppleScript eine saubere Möglichkeit, um zu überprüfen, ob der Sicherungsvorgang abgeschlossen ist? Oder gibt es einen guten "Haken", den Sie in bash verwenden können, um zu überprüfen, ob er abgeschlossen ist?

Whitneyz
quelle
Ich würde fragen, warum nicht einfach das Original rsync - ich frage dies, soweit ich weiß, dass rsync die Hardlink-Verzeichnisse nicht versteht, so dass Sie am Ende mehrere Kopien jeder Datei erstellen.
user151019
Meinen Sie damit, dass Time Machine bei jeder nachfolgenden Sicherung eine Sicherung mit festen Verknüpfungen zu den bereits gesicherten Originaldateien erstellt? Ich frage das, weil ich mit Time Machine nicht so vertraut bin. Wenn das der Fall ist, dann würde ich ja das Original kopieren. Aber ich bin mir ziemlich sicher, dass rsync eine Option hat, die dazu führt, dass es die Neuerstellung fester Links ignoriert.
Whitneyz
1
Ja, so funktioniert TM - rsync kann Hard-File-Links verstehen, aber ich glaube nicht, dass es Hard-Directory-Links versteht, die seit 10,5
user151019 20.12.10

Antworten:

4

Hier ist eine Möglichkeit - ich weiß, es ist bei weitem keine "richtige" Lösung, aber ich stelle mir vor, es würde funktionieren.

ps ax | grep "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper" | grep -v 'grep'

Sie durchsucht die Prozessliste nach dem backupd-helper-Prozess und filtert dann den grep-Befehl selbst heraus, damit er nicht angezeigt wird. Wenn der Befehl> 0 Ergebnisse zurückgibt, ist der backupd-helper-Prozess immer noch aktiv. Wenn nicht, ist der Prozess beendet, und Sie können davon ausgehen, dass er abgeschlossen ist.

Harv
quelle
1
...pgrep backupd-helper
Jason Salaz
1
Ich habe einen eleganteren Weg gefunden! TIME_MACHINE_PID = $! Wait $ TIME_MACHINE_PID
Whitneyz
1
@whitneyz bitte könntest du das TIME_MACHINE_PID=$! wait $TIME_MACHINE_PIDvielleicht in einer separaten Antwort erläutern ? Vielen Dank.
Graham Perrin
18

tmutil status ist der Weg des Löwen, jetzt haben wir ein nettes Werkzeug für diese Art von Abfrage.

Auf neueren Betriebssystemen gibt es einen undokumentierten Befehl tmutil currentphase, der den Namen der aktuellen Phase anzeigt.

bmike
quelle
Ja tmutuil, es ist so gewinnbringend, dass es schwer auszudrücken ist, wie schön es ist, den Backup-Status, die Statistiken und die Aktivitäten programmatisch zu verfolgen und zu überprüfen.
bmike
Verrückt, dass es anscheinend undokumentiert ist!
Zigg
5

Sie können das Backup auch mit starten tmutil startbackup -b. -bblockiert den Befehl, bis die Sicherung abgeschlossen ist.

Lri
quelle
3

tmutil status|grep -c "Running = 1"

Gibt "1" zurück, wenn ausgeführt, "0", wenn nicht.

Tadghostal66
quelle
3

Das Fehlen von Backup-bezogenen Prozessen ist keine Garantie dafür, dass ein Time Machine-Backup vollständig ist

Beachten Sie auf dem Volume, auf das Time Machine seine Backups schreibt: neben dem /Latest/Verzeichnis …… Folgendes :

  • das .inProgress/…… Bündel.

Wenn dieses Bundle vorhanden ist, ist eine Sicherung unvollständig.

Graham Perrin
quelle
Beachten Sie, dass .inProgressTime Machine möglicherweise weiterhin damit beschäftigt ist, sich auf ein Backup vorzubereiten oder dieses aufzuräumen (z. B. alte Backups zu entfernen) , auch wenn kein Verzeichnis vorhanden ist.
gidds
1

Die folgende Arbeit für mich ...


Skript backup_status:

    #!/usr/bin/env bash
    #
    # Determines if Time Machine is running and works with older Mac OS x versions
    #
    if [ x == x`type -P tmutil` ]; then
            # Older OSx
            count=`ps -ef | grep -v grep | grep -c 'CoreServices/backupd'`
            # Should also detect /Volume/Time Machine …/Latest/… directory ….inProgress/… bundle existence here to make it tight.
    else
            # OSx 10.7+
            count=`tmutil status | grep -c "Running = 1"`
    fi

    if [ $count == 0 ]; then
            echo stopped
    else
            echo running
    fi

Skript backup_wait:

    #!/usr/bin/env bash

    #
    # Waits for Time Machine backup to complete
    #
    while [ `backup_status` == running ] ; do
            sleep 2
    done

user77052
quelle
0

tmutilsexistiert erst ab 10.7. Zuvor können Sie /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helperTime Machine wie erwähnt manuell ausführen.

Anschließend können Sie waitwarten, bis der Vorgang abgeschlossen ist. Ohne Argumente wird es einfach warten; Wenn Sie die PID angeben, erhalten Sie den Rückgabewert (Exit-Status).

Insbesondere wait $!wird auf den letzten in dieser Shell gestarteten Prozess gewartet. Wie Lauri bereits erwähnt hat, wird diese Wartezeit vor dem Abschluss der Zeitmaschine zurückgegeben, da backupd-helper vor dem Abschluss der Sicherung beendet wird. Ich konnte keinen Prozessnamen finden, der darauf hinweist, dass die Sicherung nicht vollständig war.

Beim Betrachten des Inhalts von /var/logs/system.log (oder über die Konsole) ist mir aufgefallen, dass nach Abschluss der Sicherung als letztes das Time Machine-Image ausgeworfen wird. Sicher genug habe ich überprüft, dass (dies ist OS X 10.6.8) während des Backups ein /Volumes/Time Machine Backups. So können Sie einfach überprüfen, ob das Verzeichnis existiert. Wenn dies nicht mehr der Fall ist, ist Time Machine beendet.

Ich bin nicht sicher, ob dies für alle funktionieren wird, da ich die Anweisungen hier befolgt habe , um auf einem Windows-Computer im Netzwerk zu sichern.

Darda
quelle