Activar / desactivar Time Machine según el tipo de conexión de red

9

No tengo una excelente configuración de Wi-Fi aquí en casa y a veces resulta en copias de seguridad fallidas de Time Machine. ¿Hay alguna forma de especificar que Time Machine solo realiza copias de seguridad en determinadas circunstancias, es decir, la conexión Ethernet está activa ...?

babelmonk
fuente
¿Sería una opción ejecutar manualmente la máquina del tiempo?
Thorbjørn Ravn Andersen
No estoy seguro de lo que significa 'ejecutar manualmente': si está habilitado, se ejecutará de todos modos, lo ideal es activarlo / desactivarlo según las configuraciones de red.
babelmonk
El icono de Time Machine en la barra de estado tiene una entrada de menú "Copia de seguridad ahora" cuando se hace clic con el botón derecho.
Thorbjørn Ravn Andersen

Respuestas:

6

Esta es una alternativa al otro script que publiqué. Éste se ejecuta en segundo plano y prueba la conexión de red cada dos minutos para determinar si está utilizando una conexión Ethernet o inalámbrica. Si está en Ethernet, habilita Time Machine; cuando la conexión cambia a inalámbrica, deshabilita Time Machine.

Paso 1: Verificación del sistema

Mientras esté conectado a Ethernet, deberá ejecutar un comando manualmente para confirmar a qué interfaz está asignada Ethernet. Ejecute este comando:

ifconfig

Debería generar una pantalla llena de información. Lo que está buscando es una sección etiquetada encon un número después, y cuya última línea es la status: activesiguiente:

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

Tenga en cuenta el número al lado al enprincipio: esta es la interfaz en la que se ejecuta su conexión Ethernet.

Paso 2: crear la aplicación AppleScript

En la secuencia de comandos a continuación, donde dice set wired_interface to "0", cambie 0el número al lado de enen la salida anterior. (Debería ser 0; si está en una Mac Pro, puede ser 1.) También en el siguiente script, en la parte superior donde dice myusername, sustituya su propio nombre de usuario de 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 guardar. En la hoja de propiedades Guardar, establezca File Formatcomo Applicationy marque la casilla para Stay open after run handler. Guárdelo donde quiera: escritorio o carpeta de aplicaciones; realmente no importa, solo sepa dónde lo guardó.

Cuadro de diálogo Guardar del Editor de AppleScript que muestra el Formato de archivo establecido en Aplicación, y el cuadro marcado para Permanecer abierto después del controlador de ejecución

Paso 3: crea los scripts de Shell

A continuación, abra la Terminal. Escriba los siguientes comandos:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

Pegue la siguiente línea en:

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

Presione control+ x, escriba yy presione returnpara guardar y salir. Luego ejecuta este comando:

pico TM_Off.csh

Y en este archivo pegue la siguiente línea:

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

De nuevo, control+ x, luego yy returnpara guardar y salir.

Luego, ingrese estos comandos:

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

Paso 4: Configuración sudopara ejecutarse sin contraseña

Dejar que el comando Terminal se sudoejecute sin contraseña puede ser muy peligroso. Es por eso que los pasos anteriores crearon los scripts de shell en su propio directorio, por lo que lo que realmente se puede ejecutar es limitado.

Ingrese el siguiente comando en la Terminal:

sudo pico /etc/sudoers

Luego ingrese su contraseña de administrador cuando se le solicite.

Esto puede llevarlo a una pantalla (en su mayoría) en blanco, o puede tener algo de texto. Si está en blanco, está bien. Simplemente pegará la línea de abajo en la parte superior. Si el texto ya existe, también está bien; use su flecha hacia abajo para ir justo debajo de las líneas que ya están en la # User privilege specificationsección, como se ve en la captura de pantalla a continuación.

Captura de pantalla del terminal que muestra el archivo sudoers abierto en Pico

Aquí, agregue la siguiente línea:

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

En ambos lugares donde <yourusername>aparece, reemplácelo con su nombre de usuario de Mac. Presione control+ x, escriba yy presione returnpara guardar y salir.

Pruebe que estos archivos activen y desactiven Time Machine ejecutando el siguiente comando (suponiendo que Time Machine esté actualmente activado):

sudo ./TM_Off.csh

Después de un momento, el icono de Time Machine en la barra de menú debería volverse gris, indicando que Time Machine está apagado. (Es posible que deba hacer clic en el icono para que refleje el cambio). Suponiendo que esto funciona, ejecute este comando:

sudo ./TM_On.csh

Y Time Machine debería volver a habilitarse.

Y fuera de ti

Ejecute la aplicación que creó en el AppleScript Editor anterior, y permanecerá abierta, habilitando e inhabilitando Time Machine a medida que su conexión cambie de Ethernet a inalámbrica y viceversa. Para deshabilitar el cambio, simplemente cierre la aplicación AppleScript (haga clic derecho en el icono en el Dock y elija Salir).

tubedogg
fuente
Wow, esto es increíble, me aseguraré de mirarlo y pegar mis resultados aquí, ¡incluso puedo pegarlo en GitHub (con el debido crédito, por supuesto)!
babelmonk
Aquí hay una condición de carrera: cuando te conectas a WiFi tienes una ventana de dos minutos en la que TM puede comenzar antes de que el script se dé cuenta y lo apague.
Reid
1
En lugar de activar esto cada 2 minutos, puede activarlo cada vez que haya un cambio en la configuración de la red. Solo tiene que usarlo launchdy decirle que busque cambios en la /Library/Preferences/SystemConfiguration/carpeta. Tengo un ejemplo de esto disponible en github.com/tjluoma/onnetworkchange .
TJ Luoma
6

Este AppleScript verificará si la conexión Ethernet está activa y, a continuación, ejecutará una copia de seguridad de Time Machine.

Primero, deshabilite Time Machine en Preferencias del Sistema. El siguiente método lo ejecutará automáticamente.

Mientras esté conectado a Ethernet , deberá ejecutar un comando manualmente para confirmar a qué interfaz está asignada Ethernet. Ejecute este comando:

ifconfig

Debería generar una pantalla llena de información. Lo que está buscando es una sección etiquetada encon un número después, y cuya última línea es la status: activesiguiente:

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

Tenga en cuenta el número al lado al enprincipio: esta es la interfaz en la que se ejecuta su conexión Ethernet. En el script a continuación, donde dice en9, reemplace 9con el número de arriba. (Si tiene una Mac Pro, lo más probable es que sea en0o en1. De lo contrario, es probable que lo sea 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

Guarde esto como EthernetTimeMachine.scpten su carpeta de inicio ( /Users/<yourusername>/).

A continuación, abra Terminal y escriba el siguiente comando:

pico ~/crontab

Esto abrirá un editor de texto para permitirle programar este script para que se ejecute cada hora, al igual que Time Machine lo hace de manera predeterminada. Pega esta línea:

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

Presione control+ Xluego escriba yy presione returnpara guardar y salir.

Para deshabilitarlo, regrese a la Terminal, nuevamente use el comando:

pico ~/crontab

Luego, elimine la línea que agregó anteriormente y siga los mismos pasos para guardar y salir.

tubedogg
fuente
Ah, esto es increíble, ¡muchas gracias! Una pregunta: ¿necesito desactivar la máquina del tiempo? ¿O lo has habilitado? ¿Seguramente si está habilitado todavía se ejecutará en su propio horario?
babelmonk
Un pensamiento en líneas similares (perdón por la doble publicación): ¿no podría ejecutar algo como esto: lwgat.blogspot.co.uk/2013/02/… para habilitar / deshabilitar la máquina del tiempo y ejecutar esto en lugar de @hourly pero en la red cambiar evento?
babelmonk
Debería deshabilitar Time Machine en su configuración antes de hacer esto. En cuanto a utilizar un evento de cambio de red y / o habilitar / deshabilitar Time Machine, definitivamente es factible. Echaré un vistazo esta noche y pondré algo juntos en otra respuesta.
tubedogg
La única desventaja de detectar un cambio en la red es que debe tener algo ejecutándose constantemente en segundo plano para detectarlo.
tubedogg
-1

Puede abrir sus Preferencias de red y asegurarse de que Ethernet sea la conexión principal en la orden de servicio. Puedes ver lo que quiero decir en esta captura de pantalla, espero.

Luego, si Ethernet está conectado, siempre debe usarlo como su conexión principal.

Consulte aquí cómo establecer la prioridad del servicio: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/

usuario55785
fuente
Gracias, entiendo esa pieza. El problema es que explícitamente necesito deshabilitar las copias de seguridad cuando Ethernet no está conectado. Supongo que podría escribir un AppleScript para activarlo / desactivarlo (algo así: hints.macworld.com/article.php?story=20040222210724156 grepping de ifconfig en0) ...
babelmonk