Time Machine'in yedeklemeyi bitirip bitirmediğini kontrol etmek için bir bash komutu var mı?


16

Ssh kullanarak uzak bir sunucuya benim Time Machine dizinini rsycnc olacak bir komut dosyası yazıyorum. Bir kabuk betiğinden bir AppleScript'e geçtim ve daha sonra bir Apple betiğine geri döndüm ve çözümün ne tür bir komut dosyası gerektireceğini gerçekten umursamıyorum.

Bu küçük kod snippet'i ile yedekleme işlemine başlamayı başardım.

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

Şimdi yapmaya çalıştığım şey, yedekleme tamamlandıktan sonra gerçekleştirilen bir rsync komutu var. AppleScript'te yedekleme işleminin tamamlanıp tamamlanmadığını kontrol etmenin temiz bir yolu var mı? Yoksa bash'da tamamlanıp tamamlanmadığını kontrol etmek için kullanabileceğiniz iyi bir "kanca" var mı?


Neden sadece orijinal rsync değil sormak istiyorum - anlıyorum bu rsync sabit bağlantı dizinleri anlamıyor anlamak, böylece her dosyanın birden çok kopyasını alacak böylece.
user151019

Gerçekleştirilen her ardışık yedeklemede, Time Machine zaten yedeklenmiş orijinal dosyalara sabit bağlantılar içeren bir yedek oluşturacak mı? Bunu soruyorum çünkü Time Machine'e aşina değilim. Bu durumda, evet orijinali kopyalarım. Ancak rsync'in sabit bağlantıları yeniden oluşturmayı göz ardı etmesine neden olacak bir seçeneğe sahip olduğundan eminim.
whitneyz

1
Evet o TM işliyor - rsync sert dosya bağlantıları anlayabilir ama ben 10,5 beri OSX özgü sert dizin bağlantıları anladığını sanmıyorum
user151019

Yanıtlar:


4

İşte bir yol - bunun "uygun" bir çözüme yakın hiçbir yerde olmadığını biliyorum, ama işe yarayacağını hayal ediyorum.

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

Yaptığı şey, backupd-helper işlemi için işlem listesinde arama yapmak ve ardından grep komutunun kendisinin görünmesini filtrelemek. Komut> 0 sonuç döndürürse, backupd-helper işlemi hala etkindir. Değilse, süreç sona erdi ve bu yüzden bittiğini varsayabilirsiniz.


1
...pgrep backupd-helper
Jason Salaz

1
Daha zarif bir yol buldum! TIME_MACHINE_PID = $! bekle $ TIME_MACHINE_PID
whitneyz

1
@whitneyz lütfen TIME_MACHINE_PID=$! wait $TIME_MACHINE_PIDbelki ayrı bir cevapta biraz ayrıntı verebilir misiniz ? Teşekkür ederim.
Graham Perrin

18

tmutil status Aslan yolu şimdi bu tür bir sorgu için güzel bir araç var.

Daha yeni işletim sisteminde, tmutil currentphasegeçerli aşamanın adını gösteren belgelenmemiş bir komut vardır.


Evet - tmutuilkazanmak o kadar dolu ki, yedekleme durumuna, istatistiklere bakmanın ve şeyleri programlı olarak sürmenin ne kadar güzel olduğunu ifade etmek zor.
bmike

Görünüşe göre belgesiz olduğu deli!
zigg

5

Yedeklemeyi ile de başlatabilirsiniz tmutil startbackup -b. -byedekleme bitene kadar komutu engeller.


3

tmutil status|grep -c "Running = 1"

çalışırken '1', çalışmadığında '0' döndürür.


3

Yedeklemeyle ilgili işlemlerin olmaması, Time Machine yedeklemesinin tamamlandığının garantisi değildir

Time Machine'in yedeklerini yazdığı birimde: /Latest/…… dizininin yanında :

  • ... .inProgress/... paket.

Bu paket varsa, yedekleme tamamlanmaz.


Herhangi bir .inProgressdizin olmasa bile , Time Machine'in bir yedeklemeden sonra hazırlanmak veya derlemek için meşgul olabileceğini unutmayın (örn. Eski yedekleri kaldırmak).
gidds

1

Aşağıdaki iş benim için ...


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

Komut dosyası backup_wait:

    #!/usr/bin/env bash

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


0

tmutilssadece 10.7'den itibaren var. Bundan önce, belirtildiği gibi, /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helperTime Machine'i manuel olarak çalıştırmak için kullanabilirsiniz .

Daha sonra waitişlem bitene kadar beklemek için tuşunu kullanabilirsiniz . Tartışma olmadan sadece bekleyecek; PID'yi sağlarsanız, dönüş değerini (çıkış durumu) alabilirsiniz.

Özellikle, wait $!o kabukta başlatılan son işlemi bekleyecektir. Bununla birlikte, Lauri'nin belirttiği gibi, yedekleme tamamlanmadan yedekleme yardımcısı sona erdiğinden, bu bekleme makine bitmeden önce geri dönecektir. Yedeklemenin tamamlanmadığını belirten herhangi bir işlem adı bulamadım.

/Var/logs/system.log (veya Konsol aracılığıyla) içeriğine baktığımda, yedekleme bittiğinde, yapılan son şeyin zaman makinesi diski görüntüsünü çıkarmak olduğunu fark ettim. Tabii ki yedekleme sırasında (bu OS X 10.6.8) kontrol ettim /Volumes/Time Machine Backups. Böylece dizinin var olup olmadığını kontrol edebilirsiniz. Artık yapmadığında, Time Machine tamamlanmıştır.

Ağdaki bir Windows makinesine yedekleme yapmak için buradaki talimatları izlediğimden, bunun herkes için işe yarayıp yaramayacağından emin değilim .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.