根据网络连接类型启用/禁用Time Machine


9

我家里没有很棒的Wi-Fi设置,有时会导致Time Machine备份失败。是否有一种方法可以指定Time Machine仅在某些情况下备份 - 即以太网连接是否有效......?


手动运行时间机器是一种选择吗?
Thorbjørn Ravn Andersen

我不确定“手动运行”是什么意思 - 如果启用了它仍会运行,我需要根据网络配置打开/关闭它,理想情况下。
babelmonk

右键单击时,状态栏中的Time Machine图标具有“立即备份”菜单条目。
Thorbjørn Ravn Andersen

Answers:


6

这是我发布的其他脚本的替代方案。这个在后台运行并每两分钟测试一次网络连接,以确定它是使用以太网连接还是无线连接。如果在以太网上,它启用Time Machine;当连接切换到无线时,它会禁用Time Machine。

第1步:系统检查

连接到以太网时,您需要手动运行一个命令以确认分配了以太网接口。运行此命令:

ifconfig

它应该输出一个充满信息的屏幕。你要找的是标有的部分 en 在它之后有一个数字,最后一行是 status: active, 像这样:

en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=b<RXCSUM,TXCSUM,VLAN_HWTAGGING>
    ether 00:25:00:ef:30:3c 
    inet6 fe80::225:ff:feef:303c%en1 prefixlen 64 scopeid 0x5 
    inet 192.168.1.68 netmask 0xffffff00 broadcast 192.168.1.255
    media: autoselect (100baseTX <full-duplex>)
    status: active

注意旁边的数字 en 在开头 - 这是运行以太网连接的接口。

第2步:创建AppleScript应用程序

在下面的脚本中,它说的是 set wired_interface to "0",改变 0 到旁边的数字 en 在上面的输出中。 (它应该是0;如果你在Mac Pro上,它可能是1.)同样在下面的脚本中,它位于顶部 myusername,替换您自己的Mac用户名。

-- Edit variables here --
global current_username
set current_username to "myusername"
global wired_interface
set wired_interface to "0"

-- DO NOT EDIT BELOW THIS LINE --
global last_connection
set last_connection to "wireless"

on idle
    if (do shell script "ifconfig en" & wired_interface & " | awk '/inet/ {print $2}'") is not equal to "" then
        -- on ethernet
        if last_connection is equal to "wireless" then
            -- turn TM on
            -- else do nothing, we're still on ethernet
            set last_connection to "ethernet"
            do shell script "sudo /Users/" & current_username & "/TMSwitch/TM_On.csh"
        end if
    else
        -- on wireless
        if last_connection is equal to "ethernet" then
            -- turn tm off
            -- else do nothing, we're still on wireless
            set last_connection to "wireless"
            do shell script "sudo /Users/" & current_username & "/TMSwitch/TM_Off.csh"
        end if
    end if
    return 120
end idle

+ 小号 保存。在“保存”属性表中,设置 File FormatApplication,并选中复选框 Stay open after run handler。将它保存在任何你喜欢的地方 - 桌面或应用程序文件夹 - 它真的没关系,只知道你保存它的位置。

AppleScript Editor Save dialog box showing the File Format set to Application, and box checked for Stay open after run handler

第3步:创建Shell脚本

接下来,打开终端。输入以下命令:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

将以下行粘贴到:

defaults write /Library/Preferences/com.apple.TimeMachine AutoBackup -bool TRUE

控制 + X ,键入 ÿ 并按 返回 保存并退出。然后运行以下命令:

pico TM_Off.csh

并在此文件中粘贴以下行:

defaults write /Library/Preferences/com.apple.TimeMachine AutoBackup -bool FALSE

再次, 控制 + X , 然后 ÿ 返回 保存并退出。

接下来,输入以下命令:

chmod 4555 TM_O*.csh
chown root TM_O*.csh

第4步:设置 sudo 没有密码运行

让终端命令 sudo 没有密码运行可能非常危险。这就是为什么上面的步骤在他们自己的目录中创建了shell脚本,所以实际上可以运行的是有限的。

在终端中输入以下命令:

sudo pico /etc/sudoers

然后在出现提示时输入管理员密码。

这可能会将您带到(大部分)空白屏幕,或者它可能包含一些文本。如果它是空白的 - 那没关系。您只需将下面的行粘贴在顶部即可。如果文本已经存在,那也没关系;用你的向下箭头直接在已经在的线下方 # User privilege specification 部分,如下面的截图所示。

Terminal screenshot showing the sudoers file open in Pico

在这里,添加以下行:

<yourusername> ALL = NOPASSWD: /Users/<yourusername>/TMSwitch/*

在这两个地方 <yourusername> 出现,将其替换为您的Mac用户名。按 控制 + X ,键入 ÿ 并按 返回 保存并退出。

通过运行以下命令测试这些文件打开和关闭Time Machine(假设Time Machine当前处于打开状态):

sudo ./TM_Off.csh

片刻之后,菜单栏中的Time Machine图标应变为灰色,表示Time Machine已关闭。 (您可能需要单击其图标以反映更改)。假设这有效,请运行以下命令:

sudo ./TM_On.csh

并且应该重新启用Time Machine。

而且你走了

运行您在上面的AppleScript编辑器中创建的应用程序,它将保持打开状态,启用和禁用Time Machine,因为您的连接从以太网切换到无线并返回。要禁用切换,只需关闭AppleScript应用程序(右键单击Dock中的图标并选择退出)。


哇,这太棒了 - 我一定会调查它并在此处粘贴我的结果 - 我甚至可以将它粘贴在GitHub中(当然还有应有的信誉)!
babelmonk

这里有一个竞争条件:当你连接到WiFi时,你有一个两分钟的窗口,TM可能会在脚本通知之前启动并关闭它。
Reid

1
每隔2分钟触发一次,您可以在网络配置发生变化时触发它。你只需要使用 launchd 并告诉它寻找任何改变 /Library/Preferences/SystemConfiguration/ 夹。我有一个这方面的例子 github.com/tjluoma/onnetworkchange
TJ Luoma

6

此AppleScript将检查以太网连接是否处于活动状态,然后运行Time Machine备份(如果是)。

首先,在“系统偏好设置”中禁用Time Machine。以下方法将自动运行它。

连接以太网时 ,您需要手动运行一个命令以确认分配了以太网接口。运行此命令:

ifconfig

它应该输出一个充满信息的屏幕。你要找的是标有的部分 en 在它之后有一个数字,最后一行是 status: active, 像这样:

en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=b<RXCSUM,TXCSUM,VLAN_HWTAGGING>
    ether 00:25:00:ef:30:3c 
    inet6 fe80::225:ff:feef:303c%en1 prefixlen 64 scopeid 0x5 
    inet 192.168.1.68 netmask 0xffffff00 broadcast 192.168.1.255
    media: autoselect (100baseTX <full-duplex>)
    status: active

注意旁边的数字 en 在开头 - 这是运行以太网连接的接口。在下面的脚本中,它说的是 en9,替换 9 用上面的数字。 (如果你有Mac Pro,它很可能是 en0 要么 en1。否则,很可能会 en0。)

if (do shell script "ifconfig en9 | awk '/inet/ {print $2}'") is not equal to "" then
    do shell script "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper &"
end if

保存为 EthernetTimeMachine.scpt 进入你的主文件夹( /Users/<yourusername>/ )。

接下来打开终端并键入以下命令:

pico ~/crontab

这将打开一个文本编辑器,允许您安排此脚本按小时运行,就像默认情况下Time Machine一样。粘贴此行:

@hourly osascript ~/<yourusername>/EthernetTimeMachine.scpt

控制 + X 然后键入 y 并按 返回 保存并退出。

要禁用它,请返回终端,再次使用命令:

pico ~/crontab

然后删除上面添加的行并使用相同的步骤进行保存和退出。


啊 - 太棒了 - 非常感谢!一个问题 - 我需要禁用时间机器吗?或者启用它?当然如果启用它仍然会按照自己的时间表运行?
babelmonk

类似的想法(抱歉双帖) - 你能不能运行这样的东西: lwgat.blogspot.co.uk/2013/02/... 启用/禁用时间机器,并运行此而不是@hourly但网络更改事件?
babelmonk

在执行此操作之前,您可能希望在其设置中禁用Time Machine。至于利用网络变更事件和/或启用/禁用Time Machine,这绝对是可行的。今晚我会看看,并在另一个答案中一起扔东西。
tubedogg

检测网络变化的一个缺点是你必须在后台持续运行某些东西来检测它。
tubedogg

-1

您可以打开网络首选项,并确保以太网是服务订单中的顶级连接。我希望你可以在这个截图中看到我的意思。

然后,如果连接了以太网,则应始终将其用作主连接。

请参阅此处了解如何设置服务优先级: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/


谢谢,我明白这件事。问题是我明确需要在未连接以太网时禁用备份。我想我可以写一个AppleScript来禁用它(类似这样: hints.macworld.com/article.php?story=20040222210724156 从ifconfig en0获取...)...
babelmonk
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.