Ativar / desativar o Time Machine, dependendo do tipo de conexão de rede

9

Não tenho uma ótima configuração de Wi-Fi aqui em casa e, às vezes, resulta em falhas nos backups do Time Machine. Existe uma maneira de especificar que o Time Machine faça backup somente em determinadas circunstâncias - ou seja, a conexão Ethernet está ativa ...?

babelmonk
fonte
A máquina de tempo de execução manual seria uma opção?
Thorbjørn Ravn Andersen
Não sei ao certo o que significa 'execução manual' - se estiver ativado, ele será executado de qualquer maneira, preciso ativá-lo / desativá-lo de acordo com as configurações de rede, idealmente.
precisa saber é
O ícone do Time Machine na barra de status tem uma entrada de menu "Fazer backup agora" quando clica com o botão direito do mouse.
Thorbjørn Ravn Andersen

Respostas:

6

Essa é uma alternativa ao outro script que eu postei. Este é executado em segundo plano e testa a conexão de rede a cada dois minutos para determinar se está usando uma conexão Ethernet ou sem fio. Se estiver na Ethernet, habilitará o Time Machine; quando a conexão muda para sem fio, desativa o Time Machine.

Etapa 1: verificação do sistema

Enquanto estiver conectado à Ethernet, você precisará executar um comando manualmente para confirmar a qual interface a Ethernet está atribuída. Execute este comando:

ifconfig

Deve exibir uma tela cheia de informações. O que você está procurando é uma seção rotulada encom um número a seguir e cuja última linha é status: activeassim:

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

Anote o número ao lado de enno início - esta é a interface na qual sua conexão Ethernet está sendo executada.

Etapa 2: criar o aplicativo AppleScript

No script abaixo, onde está escrito set wired_interface to "0", altere 0para o número ao lado enda saída acima. (Deve ser 0; se você estiver em um Mac Pro, pode ser 1). Também no script abaixo, na parte superior onde diz myusername, substitua seu próprio nome de usuário do 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

+ spara salvar. Na folha de propriedades Salvar, defina File Formatcomo Applicatione marque a caixa Stay open after run handler. Salve-o onde quiser - área de trabalho ou pasta de aplicativos - isso realmente não importa, basta saber onde você o salvou.

Caixa de diálogo Salvar Editor do AppleScript, mostrando o Formato do arquivo definido como Aplicativo, e a caixa marcada para Manter aberto após o manipulador de execução

Etapa 3: criar os scripts do shell

Em seguida, abra o Terminal. Digite os seguintes comandos:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

Cole a seguinte linha em:

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

Pressione control+ x, digite ye pressione returnpara salvar e sair. Em seguida, execute este comando:

pico TM_Off.csh

E neste arquivo, cole a seguinte linha:

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

Novamente, control+ x, então ye returnpara salvar e sair.

Em seguida, insira estes comandos:

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

Etapa 4: configurando sudopara executar sem uma senha

Deixar o comando Terminal sudoexecutar sem uma senha pode ser muito perigoso. É por isso que as etapas acima criaram os scripts de shell em seu próprio diretório, para que o que realmente possa ser executado seja limitado.

Digite o seguinte comando no Terminal:

sudo pico /etc/sudoers

Em seguida, digite sua senha de administrador quando solicitado.

Isso pode levá-lo a uma tela em branco (principalmente), ou pode conter algum texto. Se estiver em branco - tudo bem. Basta colar a linha abaixo na parte superior. Se o texto já existe, isso também é bom; use sua seta para baixo para ir logo abaixo das linhas já na # User privilege specificationseção, como visto na captura de tela abaixo.

Captura de tela do terminal mostrando o arquivo sudoers aberto no Pico

Aqui, adicione a seguinte linha:

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

Nos dois locais em que <yourusername>aparecer, substitua-o pelo nome de usuário do Mac. Pressione control+ x, digite ye pressione returnpara salvar e sair.

Teste se esses arquivos ativam e desativam o Time Machine executando o seguinte comando (assumindo que o Time Machine esteja ativado no momento):

sudo ./TM_Off.csh

Depois de um momento, o ícone do Time Machine na barra de menus deve ficar cinza, indicando que o Time Machine está desativado. (Pode ser necessário clicar no ícone para refletir a alteração). Supondo que isso funcione, execute este comando:

sudo ./TM_On.csh

E o Time Machine deve ser reativado.

And Off You Go

Execute o aplicativo que você criou no AppleScript Editor acima e ele permanecerá aberto, ativando e desativando o Time Machine à medida que sua conexão muda da Ethernet para a sem fio e vice-versa. Para desativar a alternância, basta fechar o aplicativo AppleScript (clique com o botão direito do mouse no ícone no Dock e escolha Sair).

tubedogg
fonte
Uau, isso é incrível - vou dar uma olhada nele e colar meus resultados aqui - posso até colocá-lo no GitHub (com o devido crédito, é claro)!
precisa saber é
Há uma condição de corrida aqui: quando você se conecta ao Wi-Fi, você tem uma janela de dois minutos na qual a TM pode iniciar antes que o script perceba e o desligue.
Reid
1
Em vez de acioná-lo a cada 2 minutos, você pode acioná-lo sempre que houver uma alteração na configuração da rede. Você só precisa usar launchde dizer a ele para procurar alterações na /Library/Preferences/SystemConfiguration/pasta. Eu tenho um exemplo disso disponível em github.com/tjluoma/onnetworkchange .
TJ Luoma
6

Este AppleScript verificará se a conexão Ethernet está ativa e, em seguida, executará um backup do Time Machine.

Primeiro, desative o Time Machine nas Preferências do Sistema. O método abaixo o executará automaticamente.

Enquanto estiver conectado à Ethernet , você precisará executar um comando manualmente para confirmar a qual interface a Ethernet está atribuída. Execute este comando:

ifconfig

Deve exibir uma tela cheia de informações. O que você está procurando é uma seção rotulada encom um número a seguir e cuja última linha é status: activeassim:

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

Anote o número ao lado de enno início - esta é a interface na qual sua conexão Ethernet está sendo executada. No script abaixo, onde está escrito en9, substitua 9pelo número acima. (Se você possui um Mac Pro, provavelmente será en0ou en1. Caso contrário, provavelmente será 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

Salve isso como EthernetTimeMachine.scptna sua pasta pessoal ( /Users/<yourusername>/).

Em seguida, abra o Terminal e digite o seguinte comando:

pico ~/crontab

Isso abrirá um editor de texto para permitir que você agende esse script para ser executado a cada hora, assim como o Time Machine, por padrão. Cole esta linha:

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

Pressione control+ Xe digite ye pressione returnpara salvar e sair.

Para desativá-lo, volte ao Terminal e use novamente o comando:

pico ~/crontab

Em seguida, exclua a linha que você adicionou acima e use as mesmas etapas para salvar e sair.

tubedogg
fonte
Ah - isso é incrível - muito obrigado! Uma pergunta - preciso desativar a máquina do tempo? Ou ativou? Certamente, se estiver ativado, ele ainda será executado em sua própria programação?
precisa saber é
Um pensamento em linhas semelhantes (desculpe pelo post duplo) - você não pode executar algo assim: lwgat.blogspot.co.uk/2013/02/… para ativar / desativar a máquina do tempo e executá-la em vez de @hourly, mas na rede alterar evento?
babelmonk
Você deseja desativar o Time Machine em suas configurações antes de fazer isso. Tanto quanto utilizar um evento de mudança de rede e / ou ativar / desativar o Time Machine, isso é definitivamente possível. Vou dar uma olhada hoje à noite e jogar algo juntos em outra resposta.
precisa saber é o seguinte
A única desvantagem de detectar uma alteração na rede é que você precisa ter algo constantemente em execução em segundo plano para detectá-la.
precisa saber é o seguinte
-1

Você pode abrir suas Prefs de rede e verificar se a Ethernet é a conexão principal na ordem de serviço. Você pode ver o que quero dizer nesta imagem, espero.

Então, se a Ethernet estiver conectada, você deve sempre usá-la como sua conexão principal.

Veja aqui como definir a prioridade do serviço: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/

user55785
fonte
Obrigado, eu entendo essa peça. O problema é que eu preciso explicitamente desativar os backups quando a Ethernet não estiver conectada. Eu acho que eu poderia escrever um AppleScript para en / desativá-lo (algo como isto: hints.macworld.com/article.php?story=20040222210724156 grepping de ifconfig en0) ...
babelmonk