Esiste un comando bash per verificare se Time Machine ha terminato il backup?


16

Sto scrivendo uno script che rsycnc la mia directory di Time Machine su un server remoto usando ssh. Sono passato da uno script shell a un AppleScript e poi di nuovo a uno script Apple e non mi interessa davvero quale tipo di script richiederà la soluzione.

Ho avuto successo avviando il processo di backup con questo piccolo frammento di codice.

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

Quello che sto cercando di fare ora è eseguire un comando rsync una volta completato il backup. Esiste un modo pulito in AppleScript per verificare se il processo di backup è completato? Oppure c'è un buon "hook" che puoi usare in bash per verificare se è completato?


Vorrei chiedere perché non risincronizzare l'originale - lo chiedo per quanto ne so rsync non capisce le directory degli hard link in modo da finire per prendere più copie di ogni file.
user151019

Intendi con ogni backup successivo che viene eseguito, Time Machine genererà un backup con collegamenti reali ai file originali di cui è già stato eseguito il backup? Lo chiedo perché non ho familiarità con Time Machine. Se è così, allora sì, copierei l'originale. Ma sono abbastanza sicuro che rsync abbia un'opzione che lo farà ignorare ricreando hard link.
Whitneyz,

1
Sì, è così che funziona TM - rsync è in grado di comprendere i collegamenti ai file hard ma non credo che capisca i collegamenti alle directory hard che sono unici per OSX da 10,5
user151019

Risposte:


4

Ecco un modo: so che non è affatto vicino a una soluzione "corretta", ma immagino che funzionerebbe.

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

Ciò che fa è cercare nell'elenco dei processi il processo backupd-helper, quindi filtra il comando grep stesso dalla visualizzazione. Se il comando restituisce> 0 risultati, il processo backupd-helper è ancora attivo. In caso contrario, il processo è terminato e quindi potresti supporre che sia stato completato.


1
...pgrep backupd-helper
Jason Salaz il

1
Ho trovato un modo più elegante! TIME_MACHINE_PID = $! wait $ TIME_MACHINE_PID
whitneyz

1
@whitneyz per favore potresti approfondire TIME_MACHINE_PID=$! wait $TIME_MACHINE_PIDforse in una risposta separata? Grazie.
Graham Perrin,

18

tmutil status è il modo Lion ora che abbiamo un bel strumento per questo tipo di query.

Su un SO più recente, esiste un comando non documentato tmutil currentphaseche mostra il nome della fase corrente.


Sì, tmutuilè così pieno di vittorie, è difficile esprimere quanto sia bello sbirciare e colpire lo stato del backup, le statistiche e guidare le cose programmaticamente.
bmike

Pazzo che apparentemente non sia documentato!
zigg,

5

È inoltre possibile avviare il backup con tmutil startbackup -b. -bblocca il comando fino al termine del backup.


3

tmutil status|grep -c "Running = 1"

restituisce '1' quando è in esecuzione, '0' quando non lo è.


3

L'assenza di processi relativi al backup non lo è garantisce che un backup di Time Machine sia completo

Sul volume in cui Time Machine scrive i suoi backup: accanto alla /Latest/directory ... ..., considera:

  • il ... .inProgress/... pacchetto.

Se quel pacchetto esiste, un backup è incompleto.


Si noti che anche se non è presente alcuna .inProgressdirectory, Time Machine potrebbe essere ancora impegnato a preparare o riordinare dopo un backup (ad es. Rimuovere vecchi backup).
fa il

1

Il seguente lavoro per me ...


Script 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

Script backup_wait:

    #!/usr/bin/env bash

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


0

tmutilsesiste solo dal 10.7 in poi. Prima puoi usare, come detto, /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helperper eseguire manualmente Time Machine.

È quindi possibile utilizzare waitper attendere fino al termine del processo. Senza argomenti semplicemente aspetterà; se si fornisce il PID è possibile ottenere il valore restituito (stato di uscita).

Particolarmente, wait $! attenderà l'ultimo processo avviato in quella shell. Tuttavia, come accennato da Lauri, questa attesa tornerà prima che la macchina del tempo sia terminata perché backupd-helper termina prima che il backup venga eseguito. Non sono stato in grado di trovare alcun nome di processo che indicava che il backup non era completo.

Guardando il contenuto di /var/logs/system.log (o tramite la console), ho notato che quando il backup è finito, l'ultima cosa che viene fatta è espellere l'immagine del disco della macchina del tempo. Abbastanza sicuro ho verificato che (questo è OS X 10.6.8) durante il backup c'è un /Volumes/Time Machine Backups. Quindi puoi semplicemente controllare se la directory esiste. Quando non lo fa più, Time Machine è finito.

Non sono sicuro che funzionerà per tutti poiché ho seguito le indicazioni qui per il backup su un computer Windows sulla rete.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.