Frage

Ich schreibe ein Skript, das mein Zeitmaschinenverzeichnis mit SSH an einen Remote -Server an einen Remote -Server richtet. Ich habe mich von einem Shell -Skript zu einem Apfelkript und dann zu einem Apple -Skript umgestellt und es ist mir egal, welche Art von Skript die Lösung benötigt.

Ich hatte Erfolg mit dem Backup -Prozess mit diesem kleinen Code -Ausschnitt.

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

Ich versuche jetzt zu tun, dass ein RSYNC -Befehl durchgeführt wird, sobald diese Sicherung abgeschlossen ist. Gibt es einen sauberen Weg im AppleScript, um festzustellen, ob der Sicherungsprozess abgeschlossen ist? Oder gibt es einen guten "Haken", den Sie in Bash verwenden können, um zu prüfen, ob er abgeschlossen ist?

War es hilfreich?

Lösung

Hier ist eine Möglichkeit - ich weiß, dass es bei weitem nicht in der Nähe einer "richtigen" Lösung ist, aber ich kann mir vorstellen, dass es funktionieren würde.

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

Die Prozessliste für den Backupd-Helper-Prozess durchsucht und dann den Grep-Befehl selbst herausgefiltert. Wenn der Befehl> 0 Ergebnisse zurückgibt, ist der Backupd-Helper-Prozess weiterhin aktiv. Wenn nicht, ist der Prozess beendet, und so können Sie davon ausgehen, dass dies erledigt ist.

Andere Tipps

tmutil status Ist der Löwe jetzt, wo wir ein schönes Werkzeug für diese Art von Abfrage haben.

Sie können auch die Backup mit beginnen tmutil startbackup -b. -b Blockiert den Befehl, bis die Sicherung beendet ist.

Das Fehlen von Prozessen im Zusammenhang mit Backups ist nicht Gewissheit, dass eine Zeitmaschinensicherung abgeschlossen ist

Auf dem Volumen, zu dem Time Machine seine Backups schreibt: neben dem…/Latest/… Verzeichnis, überlegen Sie:

  • das ….inProgress/… Bündel.

Wenn dieses Bündel existiert, ist ein Backup unvollständig.

tmutil status|grep -c "Running = 1"

Gibt '1' beim Laufen zurück, '0', wenn nicht.

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

tmutils existiert nur ab 10,7 auf. Vorher können Sie, wie erwähnt, verwenden, /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper Zeitmaschine manuell ausführen.

Sie können dann verwenden wait zu warten, bis der Vorgang beendet ist. Ohne Argumente wird es einfach warten; Wenn Sie die PID angeben, können Sie den Rückgabewert (Exit -Status) erhalten.

Im Speziellen, wait $! Warte auf den letzten Prozess, der in dieser Hülle begann. Wie Lauri jedoch erwähnte, wird diese Wartezeit zurückkehren, bevor Time Machine fertig ist, da die Backupd-Helper vor Abschluss des Backups beendet ist. Ich konnte keinen Prozessnamen finden, der darauf hinwies, dass die Sicherung nicht vollständig war.

Als ich den Inhalt von /var/logs/system.log (oder über die Konsole) betrachtete, bemerkte ich, dass nach Abschluss der Sicherung das Letzte, was erledigt ist, das Time Machine -Datenträgerbild auszuwerfen. Sicher genug habe ich das überprüft (dies ist OS x 10.6.8) während der Sicherung, es gibt a /Volumes/Time Machine Backups. So können Sie einfach überprüfen, ob das Verzeichnis existiert. Wenn es nicht mehr tut, ist Time Machine fertig.

Ich bin mir nicht sicher, ob dies für alle funktioniert, da ich den Anweisungen befolgt habe hier Sicherung auf einen Windows -Computer im Netzwerk.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit apple.stackexchange
scroll top