Time Machineがバックアップを終了したかどうかを確認するbashコマンドはありますか?


16

sshを使用して、Time Machineディレクトリをリモートサーバーにrsycncするスクリプトを作成しています。シェルスクリプトからAppleScriptに切り替えてからAppleスクリプトに戻しましたが、ソリューションに必要なスクリプトの種類はあまり気にしません。

この小さなコードスニペットでバックアッププロセスを開始することに成功しました。

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

私が今やろうとしているのは、バックアップが完了したらrsyncコマンドを実行することです。AppleScriptにバックアッププロセスが完了したかどうかを確認するクリーンな方法はありますか?または、bashで使用して、完了したかどうかを確認できる「フック」がありますか?


元のファイルをrsyncするだけではない理由を尋ねます。rsyncがハードリンクディレクトリを理解しないので、すべてのファイルのコピーを複数作成することになります。
user151019

連続して実行される各バックアップで、Time Machineはバックアップ済みの元のファイルへのハードリンクを含むバックアップを生成しますか?Time Machineにあまり詳しくないので、これを尋ねます。その場合は、はい、オリジナルをコピーします。しかし、rsyncにはハードリンクの再作成を無視するオプションがあると確信しています。
ホイットニーズ

1
はいTMがどのように動作するかである- rsyncがハードファイルリンクを理解することができますが、私はtは10,5以来、OSXにユニークなハードディレクトリリンクを理解しないと思う
user151019

回答:


4

ここに一つの方法があります-それは「適切な」解決策にはほど遠いことを知っていますが、うまくいくと思います。

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

それは、backupd-helperプロセスのプロセスリストを検索し、grepコマンド自体が表示されないようにフィルターで除外します。コマンドが> 0の結果を返す場合、backupd-helperプロセスはまだアクティブです。そうでない場合、プロセスは終了しているため、完了したとみなすことができます。


1
...pgrep backupd-helper
ジェイソンサラズ

1
もっとエレガントな方法を見つけました!TIME_MACHINE_PID = $!待つ$ TIME_MACHINE_PID
whitneyz

1
@whitneyz TIME_MACHINE_PID=$! wait $TIME_MACHINE_PID、別の回答で詳しく説明していただけますか?ありがとうございました。
グラハムペリン

18

tmutil status この種のクエリ用の優れたツールが用意された今、Lionの方法です。

新しいOSにtmutil currentphaseは、現在のフェーズの名前を表示する文書化されていないコマンドがあります。


はい- tmutuil勝利に満ちているので、バックアップステータス、統計情報を覗き見して、プログラムで物事を進めることがどれほど素晴らしいかを表現するのは困難です。
bmike

それは明らかに文書化されていないことに夢中です!
zigg

5

でバックアップを開始することもできtmutil startbackup -bます。-bバックアップが完了するまでコマンドをブロックします。



3

バックアップ関連プロセスの不在は、Time Machineバックアップの完了を保証するものではありません

Time Machineがバックアップを書き込むボリュームで:/Latest/……ディレクトリと並んで、以下を検討します。

  • ... .inProgress/...バンドル。

そのバンドルが存在する場合、バックアップは不完全です。


.inProgressディレクトリがなくても、Time Machineはバックアップの準備や整理(たとえば、古いバックアップの削除)に忙しい場合があります。
gidds

1

私のための次の仕事...


スクリプト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

スクリプトbackup_wait:

    #!/usr/bin/env bash

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


0

tmutils10.7以降のみ存在します。その前に、前述のとおり、/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helperTime Machineを手動で実行するために使用できます。

その後、を使用waitして、プロセスが完了するまで待つことができます。引数なしでは、単に待機します。PIDを指定すると、その戻り値(終了ステータス)を取得できます。

特に、wait $!そのシェルで開始された最後のプロセスを待ちます。ただし、Lauriが述べたように、バックアップが完了する前にbackupd-helperが終了するため、この待ち時間はマシンが終了する前に戻ります。バックアップが完了していないことを示すプロセス名が見つかりませんでした。

/var/logs/system.logの内容(またはコンソール経由)を見ると、バックアップが完了したときに最後に行われるのは、タイムマシンのディスクイメージを取り出すことです。案の定、バックアップ中に(これはOS X 10.6.8です)を確認しました/Volumes/Time Machine Backups。したがって、ディレクトリが存在するかどうかを簡単に確認できます。終了すると、Time Machineは終了します。

ここでの指示に従ってネットワーク上のWindowsマシンにバックアップしたので、これがすべての人にとってうまくいくかどうかはわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.