Activer / désactiver Time Machine en fonction du type de connexion réseau

9

Je n'ai pas une excellente configuration Wi-Fi ici à la maison et cela entraîne parfois des échecs de sauvegarde Time Machine. Existe-t-il un moyen de spécifier que Time Machine ne sauvegarde que dans certaines circonstances - c'est-à-dire que la connexion Ethernet est active ...?

babelmonk
la source
L'exécution manuelle de Time Machine serait-elle une option?
Thorbjørn Ravn Andersen
Je ne sais pas ce que signifie «exécuter manuellement» - s'il est activé, il fonctionnera de toute façon, je dois l'activer / le désactiver en fonction des configurations réseau, idéalement.
babelmonk
L'icône Time Machine dans la barre d'état a une entrée de menu "Sauvegarder maintenant" lorsque vous cliquez dessus avec le bouton droit.
Thorbjørn Ravn Andersen

Réponses:

6

Ceci est une alternative à l'autre script que j'ai publié. Celui-ci s'exécute en arrière-plan et teste la connexion réseau toutes les deux minutes pour déterminer s'il utilise une connexion Ethernet ou sans fil. Si sur Ethernet, il active Time Machine; lorsque la connexion passe au sans fil, elle désactive Time Machine.

Étape 1: vérification du système

Une fois connecté à Ethernet, vous devrez exécuter une commande manuellement pour confirmer à quelle interface Ethernet est affectée. Exécutez cette commande:

ifconfig

Il devrait afficher un écran plein d'informations. Ce que vous recherchez est une section étiquetée enavec un numéro après, et dont la dernière ligne est status: active, comme ceci:

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

Notez le numéro à côté enau début - c'est l'interface sur laquelle votre connexion Ethernet fonctionne.

Étape 2: créer l'application AppleScript

Dans le script ci-dessous, où il est indiqué set wired_interface to "0", remplacez le 0par le numéro à côté de enla sortie ci-dessus. (Il devrait être 0; si vous êtes sur un Mac Pro, il peut être 1.) Toujours dans le script ci-dessous, en haut où il est dit myusername, remplacez votre propre nom d'utilisateur 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

+ spour enregistrer. Dans la feuille de propriétés Enregistrer, définissez le en File Formattant que Applicationet cochez la case pour Stay open after run handler. Enregistrez-le où vous voulez - Bureau ou dossier d'applications - cela n'a pas vraiment d'importance, sachez simplement où vous l'avez enregistré.

Boîte de dialogue Enregistrer de l'éditeur AppleScript affichant le format de fichier défini sur Application et case cochée Rester ouvert après l'exécution du gestionnaire

Étape 3: créer les scripts shell

Ensuite, ouvrez Terminal. Tapez les commandes suivantes:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

Collez la ligne suivante dans:

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

Appuyez sur control+ x, tapez yet appuyez sur returnpour enregistrer et quitter. Exécutez ensuite cette commande:

pico TM_Off.csh

Et dans ce fichier collez la ligne suivante:

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

Encore une fois, control+ x, puis yet returnpour enregistrer et quitter.

Ensuite, entrez ces commandes:

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

Étape 4: Configuration sudopour s'exécuter sans mot de passe

Laisser la commande Terminal sudos'exécuter sans mot de passe peut être très dangereux. C'est pourquoi les étapes ci-dessus ont créé les scripts shell dans leur propre répertoire, donc ce qui peut réellement être exécuté est limité.

Entrez la commande suivante dans le terminal:

sudo pico /etc/sudoers

Entrez ensuite votre mot de passe administrateur lorsque vous y êtes invité.

Cela peut vous amener à un écran (principalement) vide, ou il peut contenir du texte. Si c'est vide - ça va. Vous allez juste coller la ligne ci-dessous en haut. Si du texte existe déjà, c'est bien aussi; utilisez votre flèche vers le bas pour aller juste en dessous des lignes déjà dans la # User privilege specificationsection, comme le montre la capture d'écran ci-dessous.

Capture d'écran du terminal montrant le fichier sudoers ouvert dans Pico

Ici, ajoutez la ligne suivante:

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

Dans les deux endroits où <yourusername>apparaît, remplacez-le par votre nom d'utilisateur Mac. Appuyez sur control+ x, tapez yet appuyez sur returnpour enregistrer et quitter.

Testez que ces fichiers activent et désactivent Time Machine en exécutant la commande suivante (en supposant que Time Machine est actuellement activé):

sudo ./TM_Off.csh

Après un moment, l'icône Time Machine dans la barre de menu devrait devenir grise, indiquant que Time Machine est désactivé. (Vous devrez peut-être cliquer sur l'icône pour refléter le changement). En supposant que cela fonctionne, exécutez cette commande:

sudo ./TM_On.csh

Et Time Machine devrait être réactivé.

Et c'est parti

Exécutez l'application que vous avez créée dans AppleScript Editor ci-dessus, et elle restera ouverte, activant et désactivant Time Machine lorsque votre connexion passe d'Ethernet à sans fil et inversement. Pour désactiver la commutation, fermez simplement l'application AppleScript (faites un clic droit sur l'icône dans le Dock et choisissez Quitter).

tubedogg
la source
Wow, c'est incroyable - je serai sûr de l'examiner et de coller mes résultats ici - je peux même le coller dans GitHub (avec le crédit bien sûr)!
babelmonk
Il y a une condition de concurrence ici: lorsque vous vous connectez au WiFi, vous avez une fenêtre de deux minutes dans laquelle TM peut démarrer avant que le script ne le remarque et ne l'éteigne.
Reid
1
Plutôt que de le déclencher toutes les 2 minutes, vous pouvez le déclencher chaque fois qu'il y a un changement dans la configuration du réseau. Il vous suffit de l'utiliser launchdet de lui dire de rechercher les modifications apportées au /Library/Preferences/SystemConfiguration/dossier. J'ai un exemple de cela disponible sur github.com/tjluoma/onnetworkchange .
TJ Luoma
6

Cet AppleScript vérifiera si la connexion Ethernet est active, puis exécutera une sauvegarde Time Machine dans l'affirmative.

Tout d'abord, désactivez Time Machine dans les Préférences Système. La méthode ci-dessous l'exécutera automatiquement.

Une fois connecté à Ethernet , vous devrez exécuter une commande manuellement pour confirmer à quelle interface Ethernet est affectée. Exécutez cette commande:

ifconfig

Il devrait afficher un écran plein d'informations. Ce que vous recherchez est une section étiquetée enavec un numéro après, et dont la dernière ligne est status: active, comme ceci:

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

Notez le numéro à côté enau début - c'est l'interface sur laquelle votre connexion Ethernet fonctionne. Dans le script ci-dessous, où il est dit en9, remplacez-le 9par le numéro ci-dessus. (Si vous avez un Mac Pro, ce sera probablement en0ou en1. Sinon, ce sera probablement le cas 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

Enregistrez-le sous EthernetTimeMachine.scptdans votre dossier personnel ( /Users/<yourusername>/).

Ouvrez ensuite Terminal et tapez la commande suivante:

pico ~/crontab

Cela ouvrira un éditeur de texte pour vous permettre de planifier l'exécution de ce script toutes les heures, comme Time Machine le fait par défaut. Collez cette ligne:

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

Appuyez sur control+ Xpuis tapez yet appuyez sur returnpour enregistrer et quitter.

Pour le désactiver, retournez dans Terminal, utilisez à nouveau la commande:

pico ~/crontab

Supprimez ensuite la ligne que vous avez ajoutée ci-dessus et suivez les mêmes étapes pour enregistrer et quitter.

tubedogg
la source
Ah - c'est génial - merci beaucoup! Une question - dois-je désactiver la Time Machine? Ou l'avez-vous activé? Certes, s'il est activé, il fonctionnera toujours selon son propre calendrier?
babelmonk
Une pensée sur des lignes similaires (désolé pour la double publication) - ne pourriez-vous pas exécuter quelque chose comme ceci: lwgat.blogspot.co.uk/2013/02/… pour activer / désactiver la machine à remonter le temps, et l'exécuter plutôt que @hourly mais sur le réseau changer d'événement?
babelmonk
Vous souhaitez désactiver Time Machine dans ses paramètres avant de le faire. En ce qui concerne l'utilisation d'un événement de changement de réseau et / ou l'activation / la désactivation de Time Machine, c'est certainement faisable. Je vais jeter un œil ce soir et jeter quelque chose ensemble dans une autre réponse.
tubedogg
Le seul inconvénient de la détection d'un changement de réseau est que vous devez avoir quelque chose qui tourne constamment en arrière-plan pour le détecter.
tubedogg
-1

Vous pouvez ouvrir vos Préférences réseau et vous assurer qu'Ethernet est la première connexion dans l'ordre de service. Vous pouvez voir ce que je veux dire dans cette capture d'écran, j'espère.

Ensuite, si Ethernet est connecté, vous devez toujours l'utiliser comme connexion principale.

Voir ici pour savoir comment définir la priorité du service: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/

user55785
la source
Merci, je comprends cette pièce. Le problème est que j'ai explicitement besoin de désactiver les sauvegardes lorsque Ethernet n'est pas connecté. Je suppose que je pourrais écrire un AppleScript pour l'activer / le désactiver (quelque chose comme ceci: hints.macworld.com/article.php?story=20040222210724156 en provenance de ifconfig en0) ...
babelmonk