Включить / отключить Time Machine в зависимости от типа сетевого подключения

9

У меня дома нет хорошей настройки Wi-Fi, и иногда это приводит к сбоям резервного копирования Time Machine. Есть ли способ указать, что Time Machine выполняет резервное копирование только при определенных обстоятельствах - то есть соединение Ethernet активно ...?

babelmonk
источник
Будет ли вариант «машина времени» работать вручную?
Турбьёрн Равн Андерсен
Я не уверен, что означает «запуск вручную» - если он включен, он все равно будет работать, мне нужно включить / выключить его в соответствии с настройками сети, в идеале.
babelmonk
Значок Time Machine в строке состояния имеет пункт меню «Резервное копирование сейчас» при щелчке правой кнопкой мыши.
Турбьёрн Равн Андерсен

Ответы:

6

Это альтернатива другому сценарию, который я разместил. Этот работает в фоновом режиме и каждые две минуты проверяет сетевое соединение, чтобы определить, использует ли оно соединение Ethernet или беспроводное соединение. Если на Ethernet, это включает Time Machine; когда соединение переключается на беспроводное соединение, оно отключает Time Machine.

Шаг 1: Проверка системы

При подключении к Ethernet вам нужно будет выполнить одну команду вручную, чтобы подтвердить, какой интерфейс назначен Ethernet. Запустите эту команду:

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в начале - это интерфейс, на котором работает ваше соединение Ethernet.

Шаг 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

+ sчтобы сохранить. На странице свойств Сохранить установите File Formatкак Applicationи установите флажок для Stay open after run handler. Сохраняйте его где угодно - на рабочем столе или в папке приложений - это действительно не имеет значения, просто знайте, где вы его сохранили.

Диалоговое окно «Сохранить» редактора AppleScript, в котором для параметра «Формат файла» установлено значение «Приложение», а флажок «Оставаться открытым после обработчика запуска»

Шаг 3. Создание сценариев оболочки

Далее откройте Терминал. Введите следующие команды:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

Вставьте следующую строку в:

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

Нажмите control+ x, введите yи нажмите, returnчтобы сохранить и выйти. Затем выполните эту команду:

pico TM_Off.csh

И в этом файле вставьте следующую строку:

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

Снова control+ x, затем yи returnдля сохранения и выхода.

Далее введите эти команды:

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

Шаг 4: Настройка sudoдля запуска без пароля

Разрешение выполнения команды терминала sudoбез пароля может быть очень опасным. Вот почему описанные выше шаги создали сценарии оболочки в своем собственном каталоге, поэтому возможности запуска ограничены.

Введите следующую команду в Терминале:

sudo pico /etc/sudoers

Затем введите пароль администратора при появлении запроса.

Это может привести вас к (в основном) пустому экрану или к нему может быть какой-то текст. Если он пуст - это нормально. Вы просто вставите нижнюю строку вверху. Если текст уже существует, это тоже хорошо; используйте стрелку вниз, чтобы перейти прямо под линии, уже находящиеся в # User privilege specificationразделе, как показано на скриншоте ниже.

Скриншот терминала, показывающий файл sudoers, открытый в Pico

Здесь добавьте следующую строку:

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

В обоих местах <yourusername>замените его своим именем пользователя Mac. Нажмите control+ x, введите yи нажмите, returnчтобы сохранить и выйти.

Проверьте, что эти файлы включают и выключают Time Machine, выполнив следующую команду (при условии, что Time Machine в данный момент включен):

sudo ./TM_Off.csh

Через некоторое время значок Time Machine в строке меню должен стать серым, указывая на то, что Time Machine выключена. (Возможно, вам придется нажать на значок, чтобы отразить изменение). Предполагая, что это работает, выполните эту команду:

sudo ./TM_On.csh

И Time Machine должна быть снова включена.

И вы идете

Запустите приложение, которое вы создали в редакторе AppleScript выше, и оно останется открытым, включая и отключая Time Machine, когда ваше соединение переключается с Ethernet на беспроводную связь и обратно. Чтобы отключить переключение, просто закройте приложение AppleScript (щелкните правой кнопкой мыши значок в Dock и выберите «Выйти»).

tubedogg
источник
Вау, это удивительно - я обязательно посмотрю и вставлю свои результаты сюда - я могу даже вставить его в GitHub (с должным уважением, конечно)!
babelmonk
Здесь есть условие гонки: когда вы подключаетесь к WiFi, у вас есть двухминутное окно, в котором TM может запуститься до того, как скрипт заметит и выключит его.
Рейд
1
Вместо того, чтобы запускать это каждые 2 минуты, вы можете запускать его всякий раз, когда происходит изменение в конфигурации сети. Вам просто нужно использовать launchdи сказать ему, чтобы искать любые изменения в /Library/Preferences/SystemConfiguration/папке. У меня есть пример этого доступен на github.com/tjluoma/onnetworkchange .
TJ Luoma
6

Этот AppleScript проверит, активно ли соединение Ethernet, а затем запустит резервное копирование Time Machine, если это так.

Сначала отключите Time Machine в Системных настройках. Приведенный ниже метод запустит его автоматически.

При подключении к Ethernet вам нужно будет выполнить одну команду вручную, чтобы подтвердить, какой интерфейс назначен Ethernet. Запустите эту команду:

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в начале - это интерфейс, на котором работает ваше соединение Ethernet. В приведенном ниже сценарии, где говорится 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

Нажмите control+, Xзатем введите yи нажмите, returnчтобы сохранить и выйти.

Чтобы отключить его, вернитесь в терминал, снова используйте команду:

pico ~/crontab

Затем удалите строку, которую вы добавили выше, и выполните те же действия, чтобы сохранить и выйти.

tubedogg
источник
Ах - это потрясающе - спасибо большое! Один вопрос - нужно ли отключать машину времени? Или он включен? Конечно, если он включен, он все равно будет работать по собственному расписанию?
babelmonk
Мысль о похожих строках (извините за двойной пост) - не могли бы вы запустить что-то вроде этого: lwgat.blogspot.co.uk/2013/02/… чтобы включить / отключить машину времени, и запустить это вместо @hourly, но в сети изменить событие?
babelmonk
Вы хотели бы отключить Time Machine в его настройках, прежде чем делать это. Что касается использования события изменения сети и / или включения / выключения Time Machine, это, безусловно, выполнимо. Я посмотрю сегодня вечером и скину что-нибудь вместе в другом ответе.
tubedogg
Единственный недостаток обнаружения изменений в сети - у вас должно быть что-то постоянно работающее в фоновом режиме, чтобы обнаружить это.
tubedogg
-1

Вы можете открыть свои настройки сети и убедиться, что Ethernet является верхним соединением в заказе на обслуживание. Вы видите, что я имею в виду на этом скриншоте, я надеюсь.

Затем, если Ethernet подключен, вы всегда должны использовать его в качестве основного соединения.

Смотрите здесь, как установить приоритет службы: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/

user55785
источник
Спасибо, я понимаю этот кусок. Проблема в том, что мне явно нужно отключить резервные копии, когда Ethernet не подключен. Я думаю, я мог бы написать AppleScript, чтобы включить / отключить его (что-то вроде этого: hints.macworld.com/article.php?story=20040222210724156 grepping from ifconfig en0) ...
babelmonk