我正在编写一个脚本,该脚本将使用SSH将我的时间计算机目录rsycnc rsycnc rsycnc。我已经从Shell脚本切换到AppleScript,然后返回到Apple脚本,我真的不在乎解决方案需要什么样的脚本。

我成功地使用了这个小代码段开始备份过程。

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

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

有帮助吗?

解决方案

这是一种方法 - 我知道它远不及“适当”的解决方案,但我认为这会起作用。

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

它的作用是搜索流程列表中的备份助手过程,然后滤除GREP命令本身出现。如果命令返回> 0结果,则备份助手过程仍然处于活动状态。如果没有,该过程已经结束,因此您可能会认为它已经完成。

其他提示

tmutil status 现在,我们有了一种用于此类查询的好工具,是狮子的方式。

您可能还会开始备份 tmutil startbackup -b. -b 阻止命令直到备份完成。

缺乏与备份相关的过程是 不是 保证时间机器备份已完成

在时间机器写下备份的卷上:与…旁边/Latest/…目录,请考虑:

  • 这 ….inProgress/… 捆。

如果存在该捆绑包,则备份是不完整的。

tmutil status|grep -c "Running = 1"

运行时返回'1','0'当不返回。

我的以下工作...


脚本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

tmutils 仅存在10.7。在此之前,您可以使用,如上所述 /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper 手动运行时间机。

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

特别, wait $! 将等待最后一个过程开始在该外壳中。但是,正如劳里(Lauri)所提到的那样,这个等待将在时间机器完成之前返回,因为在备份完成之前,备份助手完成了。我找不到任何表明备份未完成的过程名称。

查看/var/logs/system.log(或通过控制台)的内容,我注意到备份完成后,完成的最后一件事是弹出时间机器磁盘映像。果然,我检查了(这是OS X 10.6.8)在备份期间有一个 /Volumes/Time Machine Backups. 。因此,您可以简单地检查目录是否存在。当它不再这样做时,时间机已经完成。

我不确定这是否对所有人都有用,因为我遵循了指示 这里 备份到网络上的Windows机器。

许可以下: CC-BY-SA归因
不隶属于 apple.stackexchange
scroll top