Apakah ada perintah bash untuk memeriksa untuk melihat apakah Time Machine telah selesai mencadangkan?

16

Saya sedang menulis skrip yang akan rsycnc direktori Time Machine saya ke server jauh menggunakan ssh. Saya telah beralih dari skrip shell ke AppleScript dan kemudian kembali ke skrip Apple dan saya tidak terlalu peduli skrip seperti apa yang akan diperlukan oleh solusi.

Saya telah berhasil memulai proses pencadangan dengan potongan kode kecil ini.

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

Apa yang saya coba lakukan sekarang adalah melakukan perintah rsync dilakukan setelah cadangan selesai. Apakah ada cara bersih di AppleScript untuk memeriksa untuk melihat apakah proses pencadangan selesai? Atau adakah "kait" yang bagus yang bisa Anda gunakan di bash untuk memeriksa apakah sudah selesai?

whitneyz
sumber
Saya akan bertanya mengapa tidak hanya rsync yang asli - Saya menanyakan ini sejauh yang saya mengerti rsync tidak memahami direktori tautan keras sehingga Anda akan mengambil banyak salinan dari setiap file.
user151019
Apakah maksud Anda dengan setiap pencadangan berturut-turut yang dilakukan, Time Machine akan menghasilkan cadangan dengan tautan keras ke file asli yang telah dicadangkan? Saya menanyakan hal ini karena saya tidak terlalu mengenal Time Machine. Jika itu masalahnya, maka ya saya akan menyalin aslinya. Tetapi saya cukup yakin bahwa rsync memiliki opsi yang akan membuatnya mengabaikan pembuatan ulang tautan keras.
whitneyz
1
Ya begitulah cara kerja TM - rsync dapat memahami tautan file keras tapi saya rasa saya tidak mengerti tautan direktori keras yang unik untuk OSX sejak 10,5
user151019

Jawaban:

4

Ini salah satu cara - saya tahu itu tidak ada solusi yang "tepat", tapi saya bayangkan itu akan berhasil.

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

Apa yang dilakukannya adalah mencari daftar proses untuk proses backupd-helper, lalu memfilter perintah grep agar tidak muncul. Jika perintah kembali> 0 hasil, proses backupd-helper masih aktif. Jika tidak, prosesnya telah berakhir, dan Anda mungkin menganggap itu selesai.

Harv
sumber
1
...pgrep backupd-helper
Jason Salaz
1
Saya menemukan cara yang lebih elegan! TIME_MACHINE_PID = $! tunggu $ TIME_MACHINE_PID
whitneyz
1
@ whitneyz tolong bisakah Anda menguraikan TIME_MACHINE_PID=$! wait $TIME_MACHINE_PIDmungkin dalam jawaban yang terpisah? Terima kasih.
Graham Perrin
18

tmutil status adalah cara Lion sekarang bahwa kami memiliki alat yang bagus untuk jenis pertanyaan ini.

Pada OS yang lebih baru, ada perintah tidak berdokumen tmutil currentphaseyang menunjukkan nama fase saat ini.

bmike
sumber
Ya - tmutuilsangat penuh dengan kemenangan, sulit untuk menyatakan betapa menyenangkannya untuk mengintip dan melihat status cadangan, statistik, dan menggerakkan berbagai hal secara terprogram.
bmike
Gila itu ternyata tidak berdokumen!
zigg
5

Anda juga dapat memulai pencadangan dengan tmutil startbackup -b. -bmemblokir perintah sampai cadangan selesai.

Lri
sumber
3

tmutil status|grep -c "Running = 1"

mengembalikan '1' saat berjalan, '0' saat tidak.

Tadghostal66
sumber
3

Tidak adanya proses terkait cadangan bukan jaminan bahwa cadangan Time Machine selesai

Pada volume yang Time Machine menulis cadangannya: di samping /Latest/direktori ... ..., pertimbangkan:

  • .inProgress/bundel ... ...

Jika bundel itu ada, cadangan tidak lengkap.

Graham Perrin
sumber
Perhatikan bahwa meskipun tidak ada .inProgressdirektori, Time Machine mungkin masih sibuk mempersiapkan atau merapikan setelah cadangan (mis. Menghapus cadangan lama).
gidds
1

Pekerjaan berikut untuk saya ...


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

pengguna77052
sumber
0

tmutilshanya ada dari 10,7 pada. Sebelum itu Anda dapat menggunakan, seperti yang disebutkan, /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helperuntuk menjalankan Time Machine secara manual.

Anda kemudian dapat menggunakan waituntuk menunggu sampai proses selesai. Tanpa argumen, ia hanya akan menunggu; jika Anda memberikan PID Anda bisa mendapatkan nilai baliknya (status keluar).

Terutama, wait $! akan menunggu proses terakhir dimulai di shell itu. Namun, seperti yang disebutkan Lauri, penantian ini akan kembali sebelum mesin waktu selesai karena backupd-helper selesai sebelum pencadangan dilakukan. Saya tidak dapat menemukan nama proses yang menunjukkan bahwa cadangan tidak lengkap.

Melihat isi /var/logs/system.log (atau melalui Konsol), saya perhatikan bahwa ketika cadangan selesai, hal terakhir yang dilakukan adalah mengeluarkan gambar disk mesin waktu. Cukup yakin saya memeriksa (ini adalah OS X 10.6.8) selama cadangan ada /Volumes/Time Machine Backups. Dengan demikian Anda cukup memeriksa apakah direktori tersebut ada. Ketika tidak lagi berfungsi, Time Machine selesai.

Saya tidak yakin apakah ini akan bekerja untuk semua orang karena saya telah mengikuti petunjuk di sini untuk membuat cadangan ke mesin Windows di jaringan.

darda
sumber