是否有bash命令来检查Time Machine是否已完成备份?


16

我正在编写一个脚本,该脚本使用ssh将我的Time Machine目录rsycnc到远程服务器。我已经从Shell脚本切换到AppleScript,然后又切换回Apple脚本,而且我并不在乎解决方案将需要哪种脚本。

我已经用这小段代码成功开始了备份过程。

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

我现在想做的是在备份完成后执行rsync命令。AppleScript中是否有任何干净的方法来检查备份过程是否已完成?还是可以在bash中使用一个好的“钩子”来检查它是否完成?


我会问为什么不只是同步原始文件-我问这个问题,因为我了解rsync不了解硬链接目录,因此您最终将获得每个文件的多个副本。
user151019 2010年

您是说执行每次连续备份时,Time Machine都会生成一个备份,其中包含指向已经备份的原始文件的硬链接?我问这个是因为我对Time Machine不太熟悉。如果是这样,那么我会复制原件。但是我很确定rsync有一个选项,它将导致它忽略重新创建硬链接。
whitneyz 2010年

1
是的,这是TM的工作方式-rsync可以理解硬文件链接,但我不认为t可以理解OSX自10,5以来唯一的硬目录链接
user151019 2010年

Answers:


4

这是一种方法-我知道它离“适当的”解决方案还差得远,但是我想它会起作用。

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

它的作用是在进程列表中搜索备份的帮助程序进程,然后过滤掉显示的grep命令本身。如果命令返回的结果> 0,则备份帮助器进程仍处于活动状态。如果不是,则该过程已结束,因此您可以假设它已完成。


1
...pgrep backupd-helper
杰森·萨拉兹

1
我找到了一种更优雅的方式!TIME_MACHINE_PID = $!等待$ TIME_MACHINE_PID
whitneyz 2010年

1
@whitneyz,请您详细说明一下TIME_MACHINE_PID=$! wait $TIME_MACHINE_PID吗?谢谢。
Graham Perrin

18

tmutil status 现在是Lion的方式,我们有一个用于这种查询的好工具。

在较新的OS上,有一个未记录的命令tmutil currentphase显示了当前阶段的名称。


是的- tmutuil如此充满胜利,很难表达出窥探备份状态,统计数据并以编程方式推动工作的乐趣。
bmike

疯了,它似乎没有证件!
Zigg 2013年

5

您也可以使用开始备份tmutil startbackup -b-b阻塞命令,直到备份完成。


3

tmutil status|grep -c "Running = 1"

运行时返回“ 1”,否则返回“ 0”。


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

tmutils仅从10.7开始存在。如前所述,您可以使用之前/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper手动运行Time Machine。

然后,您可以使用wait,直到该过程完成。没有参数,它将等待。如果提供PID,则可以获得其返回值(退出状态)。

特别是,wait $!将等待在该Shell中启动的最后一个进程。但是,正如Lauri所说,此等待将在时间机器完成之前返回,因为备份助手在完成备份之前就完成了。我找不到任何表明备份未完成的进程名称。

通过查看/var/logs/system.log的内容(或通过控制台),我注意到备份完成后,最后要做的就是弹出时间机器磁盘映像。果然我在备份过程中检查(这是OS X 10.6.8)是否存在/Volumes/Time Machine Backups。因此,您可以简单地检查目录是否存在。如果不再使用,Time Machine将结束。

我不确定这是否对所有人都适用,因为我已按照此处的指示备份到网络上的Windows计算机。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.