是否有bash命令可以检查时间机机器是否完成了备份?
-
16-10-2019 - |
题
我正在编写一个脚本,该脚本将使用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机器。