Włącz / wyłącz Time Machine w zależności od typu połączenia sieciowego

9

W domu nie mam świetnej konfiguracji Wi-Fi, co czasami powoduje nieudane kopie zapasowe Time Machine. Czy istnieje sposób na określenie, że Time Machine tworzy kopie zapasowe tylko w określonych okolicznościach - np. Połączenie Ethernet jest aktywne ...?

babelmonk
źródło
Czy ręczne uruchamianie wehikułu czasu byłoby opcją?
Thorbjørn Ravn Andersen
Nie jestem pewien, co oznacza „uruchamianie ręczne” - jeśli jest włączone, i tak będzie działać, muszę je włączyć / wyłączyć zgodnie z konfiguracjami sieci, najlepiej.
babelmonk
Ikona Wehikułu czasu na pasku stanu ma pozycję menu „Utwórz kopię zapasową teraz” po kliknięciu prawym przyciskiem myszy.
Thorbjørn Ravn Andersen

Odpowiedzi:

6

Jest to alternatywa dla innego skryptu, który opublikowałem. Ten działa w tle i co dwie minuty testuje połączenie sieciowe, aby ustalić, czy używa połączenia Ethernet, czy bezprzewodowego. W sieci Ethernet włącza Time Machine; kiedy połączenie przełącza się na bezprzewodowe, wyłącza Time Machine.

Krok 1: Kontrola systemu

Po podłączeniu do Ethernetu musisz ręcznie uruchomić jedno polecenie, aby potwierdzić, do którego interfejsu jest przypisany Ethernet. Uruchom to polecenie:

ifconfig

Powinien wyświetlić ekran pełen informacji. To, czego szukasz, to sekcja oznaczona ennumerem po niej, której ostatnią linią jest 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

Zanotuj liczbę obok enna początku - jest to interfejs, na którym działa twoje połączenie Ethernet.

Krok 2: Utwórz aplikację AppleScript

W skrypcie poniżej, tam gdzie jest napisane set wired_interface to "0", zmień 0liczbę na obok enpowyższego wyniku. (Powinno to być 0; jeśli używasz komputera Mac Pro, może to być 1.) Również w poniższym skrypcie, u góry, gdzie jest napisane myusername, zastąp własną nazwę użytkownika 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

+, saby zapisać. W arkuszu właściwości Zapisz ustaw File Formatjako Applicationi zaznacz pole dla Stay open after run handler. Zapisz go gdziekolwiek chcesz - na pulpicie lub w folderze aplikacji - to naprawdę nie ma znaczenia, po prostu wiedz, gdzie go zapisałeś.

Okno dialogowe Zapisz edytor AppleScript Editor pokazujące format pliku ustawiony na Aplikacja i zaznaczone pole wyboru Pozostaw otwarte po zakończeniu procedury obsługi

Krok 3: Utwórz skrypty powłoki

Następnie otwórz Terminal. Wpisz następujące polecenia:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

Wklej następujący wiersz:

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

Naciśnij control+ x, wpisz yi naciśnij, returnaby zapisać i wyjść. Następnie uruchom to polecenie:

pico TM_Off.csh

I w tym pliku wklej następujący wiersz:

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

Ponownie control+ x, a następnie yi, returnaby zapisać i wyjść.

Następnie wprowadź następujące polecenia:

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

Krok 4: Konfigurowanie sudodo działania bez hasła

Uruchamianie polecenia Terminal sudobez hasła może być bardzo niebezpieczne. Właśnie dlatego powyższe kroki utworzyły skrypty powłoki we własnym katalogu, więc to, co faktycznie można uruchomić, jest ograniczone.

Wpisz następujące polecenie w terminalu:

sudo pico /etc/sudoers

Następnie po wyświetleniu monitu wprowadź hasło administratora.

Może to doprowadzić do (przeważnie) pustego ekranu lub tekstu. Jeśli jest puste - w porządku. Po prostu wkleisz poniższy wiersz u góry. Jeśli tekst już istnieje, to też dobrze; użyj strzałki w dół, aby przejść bezpośrednio pod liniami już w # User privilege specificationsekcji, jak pokazano na poniższym zrzucie ekranu.

Zrzut ekranu terminalu pokazujący plik sudoers otwarty w Pico

Tutaj dodaj następujący wiersz:

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

W obu miejscach, w których się <yourusername>pojawi, zastąp go nazwą użytkownika komputera Mac. Naciśnij control+ x, wpisz yi naciśnij, returnaby zapisać i wyjść.

Sprawdź, czy te pliki włączają i wyłączają Time Machine, uruchamiając następujące polecenie (zakładając, że Time Machine jest aktualnie włączony):

sudo ./TM_Off.csh

Po chwili ikona wehikułu czasu na pasku menu powinna zmienić kolor na szary, co oznacza, że ​​wehikuł czasu jest wyłączony. (Może być konieczne kliknięcie ikony, aby odzwierciedlić zmianę). Zakładając, że to działa, uruchom następujące polecenie:

sudo ./TM_On.csh

A wehikuł czasu powinien zostać ponownie włączony.

I odejdź

Uruchom aplikację utworzoną w powyższym edytorze AppleScript, a pozostanie ona otwarta, włączając i wyłączając Time Machine, gdy twoje połączenie przełącza się z Ethernet na bezprzewodowe iz powrotem. Aby wyłączyć przełączanie, po prostu zamknij aplikację AppleScript (kliknij prawym przyciskiem myszy ikonę w Docku i wybierz polecenie Zakończ).

tubedogg
źródło
Wow, to jest niesamowite - na pewno się temu przyjrzę i wkleję tutaj swoje wyniki - mogę nawet umieścić to w GitHub (oczywiście z należytym uznaniem)!
babelmonk
Jest tu warunek wyścigu: po podłączeniu do Wi-Fi masz dwuminutowe okno, w którym TM może się uruchomić, zanim skrypt zauważy i wyłączy ją.
Reid
1
Zamiast uruchamiać to co 2 minuty, możesz je uruchomić za każdym razem, gdy nastąpi zmiana w konfiguracji sieci. Musisz tylko użyć launchdi powiedzieć mu, aby szukał jakichkolwiek zmian w /Library/Preferences/SystemConfiguration/folderze. Mam taki przykład dostępny na github.com/tjluoma/onnetworkchange .
TJ Luoma
6

Ten AppleScript sprawdzi, czy połączenie Ethernet jest aktywne, a następnie uruchom kopię zapasową Time Machine, jeśli tak jest.

Najpierw wyłącz Time Machine w Preferencjach systemowych. Poniższa metoda uruchomi ją automatycznie.

Po podłączeniu do Ethernetu musisz ręcznie uruchomić jedno polecenie, aby potwierdzić, do którego interfejsu jest przypisany Ethernet. Uruchom to polecenie:

ifconfig

Powinien wyświetlić ekran pełen informacji. To, czego szukasz, to sekcja oznaczona ennumerem po niej, której ostatnią linią jest 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

Zanotuj liczbę obok enna początku - jest to interfejs, na którym działa twoje połączenie Ethernet. W skrypcie poniżej, tam gdzie jest napisane en9, zamień 9na numer z góry. (Jeśli masz komputer Mac Pro, będzie to najprawdopodobniej en0albo en1. W przeciwnym razie, będzie to prawdopodobnie 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

Zapisz to jako EthernetTimeMachine.scptw swoim katalogu domowym ( /Users/<yourusername>/).

Następnie otwórz Terminal i wpisz następujące polecenie:

pico ~/crontab

Otworzy się edytor tekstu, który pozwoli ci zaplanować uruchamianie tego skryptu co godzinę, tak jak domyślnie Time Machine. Wklej tę linię:

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

Naciśnij control+, Xa następnie wpisz yi naciśnij, returnaby zapisać i wyjść.

Aby go wyłączyć, wróć do Terminala, ponownie użyj polecenia:

pico ~/crontab

Następnie usuń wiersz dodany powyżej i wykonaj te same czynności, aby zapisać i wyjść.

tubedogg
źródło
Ach - to jest niesamowite - wielkie dzięki! Jedno pytanie - czy muszę wyłączyć wehikuł czasu? A może masz włączone? Z pewnością, jeśli jest włączony, nadal będzie działał według własnego harmonogramu?
babelmonk
Myśl o podobnych liniach (przepraszam za podwójny post) - czy nie możesz uruchomić czegoś takiego: lwgat.blogspot.co.uk/2013/02/... aby włączyć / wyłączyć maszynę czasu i uruchomić ją zamiast @hourly, ale w sieci zmienić wydarzenie?
babelmonk
Przed zrobieniem tego należy wyłączyć Time Machine w jego ustawieniach. Jeśli chodzi o wykorzystanie zdarzenia zmiany sieci i / lub włączenie / wyłączenie Time Machine, jest to zdecydowanie wykonalne. Zajrzę dziś wieczorem i zrzucę coś razem w innej odpowiedzi.
tubedogg
Jedyną wadą wykrycia zmiany sieci jest to, że musisz mieć coś ciągle działającego w tle, aby ją wykryć.
tubedogg
-1

Możesz otworzyć Prefiksy sieciowe i upewnić się, że Ethernet jest najwyższym połączeniem w zleceniu serwisowym. Mam nadzieję, że zobaczysz, co mam na myśli na tym zrzucie ekranu.

Następnie, jeśli podłączony jest Ethernet, należy zawsze używać go jako podstawowego połączenia.

Zobacz tutaj, jak ustawić priorytet usługi: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/

użytkownik55785
źródło
Dzięki, rozumiem ten kawałek. Problem polega na tym, że jawnie muszę wyłączyć kopie zapasowe, gdy sieć Ethernet nie jest podłączona. Chyba mógłbym napisać AppleScript, aby go włączyć / wyłączyć (coś takiego: hints.macworld.com/article.php?story=20040222210724156 grepping from ifconfig en0) ...
babelmonk