Abilita / disabilita Time Machine in base al tipo di connessione di rete


9

Non ho una grande configurazione Wi-Fi qui a casa e a volte si traduce in backup Time Machine non riusciti. Esiste un modo per specificare che Time Machine esegue il backup solo in determinate circostanze, ad esempio la connessione Ethernet è attiva ...?


L'esecuzione manuale della macchina del tempo sarebbe un'opzione?
Thorbjørn Ravn Andersen,

Non sono sicuro di cosa significhi "esecuzione manuale": se è abilitato funzionerà comunque, è necessario accenderlo / spegnerlo secondo le configurazioni di rete, idealmente.
babelmonk,

L'icona di Time Machine nella barra di stato ha una voce di menu "Backup ora" quando si fa clic con il tasto destro.
Thorbjørn Ravn Andersen,

Risposte:


6

Questa è un'alternativa all'altra sceneggiatura che ho pubblicato. Questo viene eseguito in background e verifica la connessione di rete ogni due minuti per determinare se utilizza una connessione Ethernet o wireless. Se su Ethernet, abilita Time Machine; quando la connessione passa al wireless disabilita Time Machine.

Passaggio 1: Verifica del sistema

Durante la connessione a Ethernet, sarà necessario eseguire manualmente un comando per confermare a quale interfaccia è assegnato Ethernet. Esegui questo comando:

ifconfig

Dovrebbe essere visualizzato uno schermo pieno di informazioni. Quello che stai cercando è una sezione etichettata encon un numero dopo di essa, e la cui ultima riga è status: active, in questo modo:

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

Nota il numero accanto enall'inizio: questa è l'interfaccia su cui è in esecuzione la tua connessione Ethernet.

Passaggio 2: creare l'applicazione AppleScript

Nello script seguente, dove dice set wired_interface to "0", cambia 0il numero accanto enall'output sopra. (Dovrebbe essere 0; se sei su un Mac Pro, potrebbe essere 1.) Anche nello script seguente, nella parte superiore dove dice myusername, sostituisci il tuo nome utente 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

+ sper salvare. Nella finestra delle proprietà Salva, impostare File Formatcome Applicatione selezionare la casella per Stay open after run handler. Salvalo dove preferisci - Desktop o Cartella Applicazioni - non importa, basta sapere dove l'hai salvato.

Finestra di dialogo Salva dell'editor AppleScript che mostra il Formato file impostato su Applicazione e la casella selezionata per Gestore Resta aperto dopo l'esecuzione

Passaggio 3: creare gli script Shell

Quindi, aprire Terminal. Digita i seguenti comandi:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

Incolla la seguente riga in:

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

Premere control+ x, digitare ye premere returnper salvare ed uscire. Quindi eseguire questo comando:

pico TM_Off.csh

E in questo file incolla la seguente riga:

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

Ancora una volta, control+ x, quindi ye returnper salvare ed uscire.

Quindi, inserisci questi comandi:

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

Passaggio 4: impostazione sudoper l'esecuzione senza password

Lasciare sudoeseguire il comando Terminale senza password può essere molto pericoloso. Ecco perché i passaggi precedenti hanno creato gli script della shell nella propria directory, quindi ciò che può essere effettivamente eseguito è limitato.

Immettere il seguente comando nel Terminale:

sudo pico /etc/sudoers

Quindi inserire la password dell'amministratore quando richiesto.

Questo potrebbe farti apparire su uno schermo (principalmente) vuoto, o potrebbe contenere del testo. Se è vuoto, va bene. Basta incollare la riga in basso in alto. Se il testo esiste già, va bene lo stesso; usa la tua freccia in giù per andare subito sotto le linee già nella # User privilege specificationsezione, come mostrato nello screenshot qui sotto.

Screenshot del terminale che mostra il file sudoers aperto in Pico

Qui, aggiungi la seguente riga:

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

In entrambi i punti in cui <yourusername>appare, sostituiscilo con il tuo nome utente Mac. Premere control+ x, digitare ye premere returnper salvare ed uscire.

Verifica che questi file attivino e disattivino Time Machine eseguendo il comando seguente (supponendo che Time Machine sia attualmente attivo):

sudo ./TM_Off.csh

Dopo qualche istante l'icona Time Machine nella barra dei menu dovrebbe diventare grigia, a indicare che Time Machine è disattivato. (Potrebbe essere necessario fare clic sull'icona affinché rifletta la modifica). Supponendo che funzioni, eseguire questo comando:

sudo ./TM_On.csh

E Time Machine dovrebbe essere riattivato.

E il gioco è fatto

Esegui l'applicazione che hai creato in AppleScript Editor sopra e rimarrà aperta, abilitando e disabilitando Time Machine mentre la tua connessione passa da Ethernet a wireless e viceversa. Per disabilitare la commutazione, basta chiudere l'applicazione AppleScript (fare clic con il tasto destro sull'icona nel Dock e scegliere Esci).


Caspita, è incredibile - cercherò di esaminarlo e incollare i miei risultati qui - Potrei anche incollarlo in GitHub (con il dovuto credito ovviamente)!
Babelmonk,

C'è una condizione di competizione qui: quando ti connetti al WiFi hai una finestra di due minuti in cui TM potrebbe iniziare prima che lo script lo noti e lo spenga.
Reid,

1
Invece di attivarlo ogni 2 minuti, è possibile attivarlo ogni volta che si verifica una modifica nella configurazione di rete. Devi solo usare launchde dirgli di cercare eventuali modifiche alla /Library/Preferences/SystemConfiguration/cartella. Ne ho un esempio disponibile su github.com/tjluoma/onnetworkchange .
TJ Luoma,

6

Questo AppleScript verificherà se la connessione Ethernet è attiva e quindi eseguirà un backup di Time Machine.

Innanzitutto, disabilita Time Machine nelle Preferenze di Sistema. Il metodo seguente lo eseguirà automaticamente.

Durante la connessione a Ethernet , sarà necessario eseguire un comando manualmente per confermare a quale interfaccia è assegnato Ethernet. Esegui questo comando:

ifconfig

Dovrebbe essere visualizzato uno schermo pieno di informazioni. Quello che stai cercando è una sezione etichettata encon un numero dopo di essa, e la cui ultima riga è status: active, in questo modo:

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

Nota il numero accanto enall'inizio: questa è l'interfaccia su cui è in esecuzione la tua connessione Ethernet. Nello script seguente, dove dice en9, sostituire 9con il numero dall'alto. (Se hai un Mac Pro, molto probabilmente lo sarà en0o en1. Altrimenti, probabilmente lo sarà 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

Salvalo come EthernetTimeMachine.scptnella tua cartella home ( /Users/<yourusername>/).

Quindi aprire Terminale e digitare il comando seguente:

pico ~/crontab

Questo aprirà un editor di testo per permetterti di programmare l'esecuzione di questo script su base oraria, proprio come fa Time Machine per impostazione predefinita. Incolla questa riga:

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

Premere control+ Xquindi digitare ye premere returnper salvare ed uscire.

Per disabilitarlo, torna al Terminale, usa di nuovo il comando:

pico ~/crontab

Quindi elimina la riga che hai aggiunto sopra e usa gli stessi passaggi per salvare ed uscire.


Ah - è fantastico - grazie mille! Una domanda: devo disabilitare la macchina del tempo? O è abilitato? Sicuramente se è abilitato funzionerà comunque secondo il suo programma?
babelmonk,

Un pensiero su linee simili (scusate per il doppio post) - non potreste eseguire qualcosa del genere: lwgat.blogspot.co.uk/2013/02/… per abilitare / disabilitare la macchina del tempo, ed eseguire questo anziché @hourly ma sulla rete cambia evento?
babelmonk,

Si vorrebbe disabilitare Time Machine nelle sue impostazioni prima di farlo. Per quanto riguarda l'utilizzo di un evento di cambio di rete e / o l'abilitazione / disabilitazione di Time Machine, è sicuramente fattibile. Stasera darò un'occhiata e lancerò qualcosa insieme in un'altra risposta.
tubedogg,

L'unico svantaggio nel rilevare una modifica della rete è che devi essere costantemente in esecuzione in background per rilevarla.
tubedogg,

-1

È possibile aprire le preferenze di rete e assicurarsi che Ethernet sia la connessione principale nell'ordine di servizio. Puoi vedere cosa intendo in questo screenshot, spero.

Quindi, se Ethernet è connessa, dovresti sempre usarla come connessione principale.

Vedi qui per come impostare la priorità del servizio: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/


Grazie, capisco quel pezzo. Il problema è che ho esplicitamente bisogno di disabilitare i backup quando Ethernet non è connessa. Immagino di poter scrivere un AppleScript per abilitarlo / disabilitarlo (qualcosa del genere: hints.macworld.com/article.php?story=20040222210724156 che passa da ifconfig en0) ...
babelmonk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.