Ich schreibe ein Skript, das mein Time Machine-Verzeichnis mit ssh auf einen Remote-Server rsycnc. Ich bin von einem Shell-Skript zu einem AppleScript und dann zurück zu einem Apple-Skript gewechselt, und es ist mir eigentlich egal, welche Art von Skript die Lösung benötigt.
Ich hatte Erfolg beim Starten des Backup-Prozesses mit diesem kleinen Code-Snippet.
do shell script "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper >/dev/null 2>&1 &"
Was ich jetzt versuche, ist, dass ein rsync-Befehl ausgeführt wird, sobald diese 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 "Hook", den Sie in Bash verwenden können, um zu überprüfen, ob es abgeschlossen ist?
Hier ist ein Weg - ich weiß, dass es bei weitem keine "richtige" Lösung ist, aber ich stelle mir vor, dass es funktionieren würde.
ps ax | grep "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper" | grep -v 'grep'
Es durchsucht die Prozessliste nach dem Prozess backupd-helper und filtert dann den grep-Befehl selbst aus der Anzeige heraus. Wenn der Befehl > 0 Ergebnisse zurückgibt, ist der Prozess backupd-helper noch aktiv. Ist dies nicht der Fall, ist der Vorgang beendet, und Sie können davon ausgehen, dass er abgeschlossen ist.
pgrep backupd-helper
TIME_MACHINE_PID=$! wait $TIME_MACHINE_PID
vielleicht in einer separaten Antwort näher erläutern? Danke dir.tmutil status
Mit Lion haben wir nun übrigens ein nettes Tool für diese Art von Abfrage.
Auf neueren Betriebssystemen gibt es einen undokumentierten Befehl tmutil currentphase
, der den Namen der aktuellen Phase anzeigt.
tmutuil
es ist so voller Gewinn, dass es schwer zu beschreiben ist, wie schön es ist, einen Blick auf den Backup-Status, die Statistiken und die programmatische Steuerung zu werfen.Sie können die Sicherung auch mit starten tmutil startbackup -b
. -b
blockiert den Befehl, bis die Sicherung abgeschlossen ist.
tmutil status|grep -c "Running = 1"
gibt '1' zurück, wenn es läuft, '0', wenn es nicht läuft.
Auf dem Volume, auf das Time Machine seine Backups schreibt: neben dem /Latest/
Verzeichnis … … Folgendes beachten:
.inProgress/
… Bündel.Wenn dieses Bundle vorhanden ist, ist eine Sicherung unvollständig.
.inProgress
Verzeichnis vorhanden ist, damit beschäftigt sein kann, ein Backup vorzubereiten oder danach aufzuräumen (z. B. alte Backups zu entfernen).Folgendes funktioniert bei mir...
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 erst ab 10.7. Davor können Sie, wie erwähnt, /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper
Time Machine manuell ausführen.
Sie können dann wait
mit warten, bis der Vorgang abgeschlossen ist. Ohne Argumente wird es einfach warten; Wenn Sie die PID angeben, können Sie deren Rückgabewert (Ausgangsstatus) erhalten.
Insbesondere wait $!
wird auf den letzten Prozess gewartet, der in dieser Shell gestartet wurde. Wie Lauri jedoch erwähnte, kehrt dieses Warten zurück, bevor die Zeitmaschine beendet ist, da backupd-helper beendet wird, bevor die Sicherung abgeschlossen ist. Ich konnte keinen Prozessnamen finden, der darauf hindeutet, dass die Sicherung nicht abgeschlossen war.
Beim Betrachten des Inhalts von /var/logs/system.log (oder über die Konsole) ist mir aufgefallen, dass nach Abschluss der Sicherung das letzte, was getan wird, darin besteht, das Festplatten-Image der Zeitmaschine auszuwerfen. Natürlich habe ich überprüft, dass (dies ist OS X 10.6.8) während der Sicherung eine /Volumes/Time Machine Backups
. So können Sie einfach prüfen, ob das Verzeichnis existiert. Wenn dies nicht mehr der Fall ist, ist Time Machine beendet.
Ich bin mir nicht sicher, ob dies für alle funktioniert, da ich die Anweisungen hier befolgt habe, um auf einem Windows-Computer im Netzwerk zu sichern.
mmmmmm
whitneyz
mmmmmm