ネットワーク接続タイプに応じてTime Machineを有効または無効にする


9

私は自宅で優れたWi-Fi設定をしていないため、Time Machineバックアップに失敗することがあります。Time Machineが特定の状況でのみバックアップするように指定する方法はありますか?つまり、イーサネット接続がアクティブです...?


手動でタイムマシンを実行することはオプションでしょうか?
–ThorbjørnRavn Andersen 2013

「手動で実行する」の意味がわかりません。有効になっている場合でも実行されますが、理想的には、ネットワーク構成に従ってオン/オフにする必要があります。
babelmonk 2013

ステータスバーのTime Machineアイコンには、右クリックすると[今すぐバックアップ]メニューエントリがあります。
–ThorbjørnRavn Andersen 2013

回答:


6

これは私が投稿した他のスクリプトの代わりです。これはバックグラウンドで実行され、ネットワーク接続を2分ごとにテストして、イーサネット接続とワイヤレスのどちらを使用しているかを判断します。イーサネットの場合、Time Machineが有効になります。接続がワイヤレスに切り替わると、Time Machineが無効になります。

ステップ1:システムチェック

イーサネットに接続している間は、1つのコマンドを手動で実行して、イーサネットが割り当てられているインターフェイスを確認する必要があります。次のコマンドを実行します。

ifconfig

情報がいっぱいの画面が出力されます。あなたが探しているのenstatus: 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

en最初の横の番号に注意してください-これは、イーサネット接続が実行されているインターフェースです。

ステップ2:AppleScriptアプリケーションを作成する

以下のスクリプトで、とある箇所で、上記の出力のの横にある番号にset wired_interface to "0"変更します。(0である必要があります。MacProを使用している場合は、1の場合があります。)また、以下のスクリプトの上部にあるで、独自のMacユーザー名に置き換えます。0enmyusername

-- 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

+ s保存します。[保存]プロパティシートで、をに設定File FormatApplication、のチェックボックスをオンにしますStay open after run handler。それを好きな場所に保存します-デスクトップ、またはアプリケーションフォルダー-それは本当に重要ではありません。保存した場所を知っているだけです。

AppleScriptエディタの[保存]ダイアログボックスで、[ファイル形式]が[アプリケーション]に設定され、[実行後にハンドラーを開いたままにする]チェックボックスがオンになっている

ステップ3:シェルスクリプトを作成する

次に、ターミナルを開きます。次のコマンドを入力します。

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

次の行を貼り付けます。

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

プレスcontrol+ x、タイプyキーを押しreturn、保存して終了します。次に、次のコマンドを実行します。

pico TM_Off.csh

このファイルに次の行を貼り付けます。

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

繰り返しますが、control+ x、次にy、およびreturn保存して終了します。

次に、次のコマンドを入力します。

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

ステップ4:sudoパスワードなしで実行するためのセットアップ

ターミナルコマンドsudoをパスワードなしで実行させるのは非常に危険です。上記の手順でシェルスクリプトが独自のディレクトリに作成されたのはそのためです。そのため、実際に実行できるものは限られています。

ターミナルで次のコマンドを入力します。

sudo pico /etc/sudoers

次に、プロンプトが表示されたら管理者パスワードを入力します。

これにより、(ほとんど)空白の画面が表示されるか、テキストが含まれている可能性があります。空白の場合は問題ありません。下の行を上部に貼り付けるだけです。テキストがすでに存在する場合も、それで問題ありません。# User privilege specification下のスクリーンショットに示すように、下矢印を使用して、セクション内の既存の行のすぐ下に移動します。

ピコで開いているsudoersファイルを示すターミナルのスクリーンショット

ここで、次の行を追加します。

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

<yourusername>表示されている両方の場所で、Macのユーザー名に置き換えます。プレスcontrol+ x、タイプyキーを押しreturn、保存して終了します。

次のコマンドを実行して、これらのファイルがTime Machineをオンまたはオフにすることをテストします(Time Machineが現在オンになっていると想定しています)。

sudo ./TM_Off.csh

しばらくすると、メニューバーのTime Machineアイコンが灰色に変わり、Time Machineがオフになっていることを示します。(変更を反映するには、アイコンをクリックする必要がある場合があります)。これが機能すると仮定して、次のコマンドを実行します。

sudo ./TM_On.csh

また、Time Machineを再度有効にする必要があります。

そして、あなたは行く

上記のAppleScript Editorで作成したアプリケーションを実行すると、接続がイーサネットからワイヤレスに切り替わるときにTime Machineが有効または無効になり、開いたままになります。切り替えを無効にするには、AppleScriptアプリケーションを閉じます(Dockのアイコンを右クリックして[終了]を選択します)。


うわー、これはすごいです-必ず調べて結果をここに貼り付けます-GitHubに貼り付けることもできます(もちろん当然ですが)。
babelmonk 2013

ここには競合状態があります。WiFiに接続すると、スクリプトが通知してオフにする前にTMが開始する2分のウィンドウがあります。
リード

1
これを2分ごとにトリガーするのではなく、ネットワーク構成に変更があったときにトリガーできます。使用launchdして、/Library/Preferences/SystemConfiguration/フォルダへの変更を探すように指示するだけです。github.com/tjluoma/onnetworkchangeでこの例を入手できます。
TJルオマ2013

6

このAppleScriptは、イーサネット接続がアクティブかどうかを確認し、アクティブな場合はTime Machineバックアップを実行します。

まず、システム環境設定でTime Machineを無効にします。以下のメソッドはそれを自動的に実行します。

イーサネット接続している間は、1つのコマンドを手動で実行して、イーサネットが割り当てられているインターフェイスを確認する必要があります。次のコマンドを実行します。

ifconfig

情報がいっぱいの画面が出力されます。あなたが探しているのenstatus: 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

en最初の横の番号に注意してください-これは、イーサネット接続が実行されているインターフェースです。以下のスクリプトで、とあるところはen99上の番号に置き換えてください。(Mac Proをお持ちの場合は、en0またはen1と思われます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

これをEthernetTimeMachine.scptホームフォルダに保存します(/Users/<yourusername>/)。

次にターミナルを開き、次のコマンドを入力します。

pico ~/crontab

これにより、テキストエディターが開き、Time Machineがデフォルトで実行するのと同じように、このスクリプトを1時間ごとに実行するようにスケジュールできます。この行を貼り付けます:

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

キーを押しcontrol+はX、次に入力しyEnterキーを押してreturn保存して終了します。

無効にするには、ターミナルに戻り、次のコマンドを使用します。

pico ~/crontab

次に、上記で追加した行を削除し、同じ手順を使用して保存して終了します。


ああ-これは素晴らしいです-ありがとうございます!1つの質問-タイムマシンを無効にする必要がありますか?それとも有効になっていますか?確かに有効になっている場合でも、独自のスケジュールで実行されますか?
babelmonk 2013

同様の行についての考え(ダブルポストでは申し訳ありません)-次のようなものは実行できません:lwgat.blogspot.co.uk/2013/02/…タイムマシンを有効/無効にし、これを@hourlyではなくネットワークで実行しますイベントを変更しますか?
babelmonk 2013

これを行う前に、設定でTime Machineを無効にする必要があります。ネットワーク変更イベントを利用したり、Time Machineを有効または無効にしたりすることに関しては、それは間違いなく実行可能です。今夜見て、別の答えで一緒に何かを投げます。
tubedogg 2013

ネットワークの変更を検出することの1つの欠点は、何かをバックグラウンドで実行して検出する必要があることです。
tubedogg 2013

-1

ネットワーク設定を開き、イーサネットがサービス注文の一番上の接続であることを確認できます。このスクリーンショットで私が何を意味するかがわかると思います。

次に、イーサネットが接続されている場合は、常にプライマリ接続として使用する必要があります。

サービスの優先度を設定する方法については、こちらをご覧ください:http : //osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/


ありがとう、私はその作品を理解しています。問題は、イーサネットが接続されていないときにバックアップを明示的に無効にする必要があることです。私はそれをen / disableにするAppleScriptを書くことができると思います(このようなもの:hints.macworld.com/article.php ? story =20040222210724156 ifconfig en0からgrepping)...
babelmonk 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.