Mengaktifkan / menonaktifkan Time Machine tergantung pada jenis koneksi jaringan

9

Saya tidak punya pengaturan Wi-Fi yang bagus di sini di rumah dan terkadang menghasilkan cadangan Time Machine yang gagal. Apakah ada cara untuk menentukan bahwa Time Machine hanya mencadangkan dalam keadaan tertentu - mis. Koneksi Ethernet aktif ...?

babelmonk
sumber
Apakah menjalankan mesin waktu secara manual menjadi opsi?
Thorbjørn Ravn Andersen
Saya tidak yakin apa artinya 'berjalan secara manual' - jika diaktifkan akan tetap berjalan, saya harus mengaktifkan / menonaktifkannya sesuai dengan konfigurasi jaringan, idealnya.
babelmonk
Ikon Time Machine di bilah status memiliki entri menu "Cadangkan sekarang" saat diklik kanan.
Thorbjørn Ravn Andersen

Jawaban:

6

Ini adalah alternatif dari skrip lain yang saya posting. Yang ini berjalan di latar belakang dan menguji koneksi jaringan setiap dua menit untuk menentukan apakah itu menggunakan koneksi Ethernet atau nirkabel. Jika pada Ethernet, ini memungkinkan Time Machine; ketika koneksi beralih ke nirkabel itu menonaktifkan Time Machine.

Langkah 1: Pemeriksaan Sistem

Saat terhubung ke Ethernet, Anda harus menjalankan satu perintah secara manual untuk mengonfirmasi antarmuka Ethernet mana yang ditugaskan. Jalankan perintah ini:

ifconfig

Seharusnya menampilkan layar yang penuh dengan informasi. Apa yang Anda cari adalah bagian yang berlabel ennomor setelahnya, dan yang baris terakhirnya adalah status: active, seperti ini:

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

Catat nomor di sebelah endi awal - ini adalah antarmuka yang menjalankan koneksi Ethernet Anda.

Langkah 2: Buat Aplikasi AppleScript

Dalam skrip di bawah ini, di mana dikatakan set wired_interface to "0", ubah 0ke nomor di sebelah endalam output di atas. (Seharusnya 0; jika Anda menggunakan Mac Pro, mungkin 1.) Juga dalam skrip di bawah ini, di bagian atas di mana tertulis myusername, gantilah nama pengguna Mac Anda sendiri.

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

+ suntuk menyimpan. Di lembar Simpan properti, atur File Formatsebagai Application, dan centang kotak untuk Stay open after run handler. Simpan di mana pun Anda suka - Desktop, atau Aplikasi Folder - itu benar-benar tidak masalah, hanya tahu di mana Anda menyimpannya.

Kotak dialog Simpan Editor AppleScript memperlihatkan Format File diatur ke Aplikasi, dan kotak dicentang untuk Tetap terbuka setelah menjalankan penangan

Langkah 3: Buat Script Shell

Selanjutnya, buka Terminal. Ketikkan perintah berikut:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

Rekatkan baris berikut di:

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

Tekan control+ x, ketik ydan tekan returnuntuk menyimpan dan keluar. Kemudian jalankan perintah ini:

pico TM_Off.csh

Dan dalam file ini tempelkan baris berikut:

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

Sekali lagi, control+ x, lalu ydan returnuntuk menyimpan dan keluar.

Selanjutnya, masukkan perintah ini:

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

Langkah 4: Mengatur sudountuk Menjalankan Tanpa Kata Sandi

Membiarkan perintah Terminal sudoberjalan tanpa kata sandi bisa sangat berbahaya. Itu sebabnya langkah-langkah di atas membuat skrip shell di direktori mereka sendiri, jadi apa yang sebenarnya bisa dijalankan terbatas.

Masukkan perintah berikut di Terminal:

sudo pico /etc/sudoers

Kemudian masukkan kata sandi administrator Anda saat diminta.

Ini dapat membawa Anda ke layar kosong (kebanyakan), atau mungkin ada teks di dalamnya. Jika kosong - tidak apa-apa. Anda hanya akan menempelkan garis di bawah ini di bagian atas. Jika teks sudah ada, itu juga bagus; gunakan panah bawah Anda untuk langsung ke bawah garis yang sudah ada di # User privilege specificationbagian, seperti yang terlihat pada tangkapan layar di bawah ini.

Tangkapan layar terminal yang memperlihatkan file sudoers terbuka di Pico

Di sini, tambahkan baris berikut:

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

Di kedua tempat yang <yourusername>muncul, gantikan dengan nama pengguna Mac Anda. Tekan control+ x, ketik ydan tekan returnuntuk menyimpan dan keluar.

Uji bahwa file-file ini menghidupkan dan mematikan Time Machine dengan menjalankan perintah berikut (dengan anggapan Time Machine sedang hidup):

sudo ./TM_Off.csh

Setelah beberapa saat, ikon Time Machine di menubar akan berubah abu-abu, yang menunjukkan Time Machine dimatikan. (Anda mungkin perlu mengklik ikon untuk mencerminkan perubahan). Dengan asumsi ini berfungsi, jalankan perintah ini:

sudo ./TM_On.csh

Dan Time Machine harus diaktifkan kembali.

Dan pergilah

Jalankan aplikasi yang Anda buat di AppleScript Editor di atas, dan itu akan tetap terbuka, mengaktifkan dan menonaktifkan Time Machine saat koneksi Anda beralih dari Ethernet ke nirkabel dan kembali. Untuk menonaktifkan perpindahan, cukup tutup aplikasi AppleScript (klik kanan pada ikon di Dock dan pilih Berhenti).

tubedogg
sumber
Wow, ini luar biasa - saya akan pastikan untuk melihatnya dan menempelkan hasil saya di sini - saya bahkan mungkin menempel di GitHub (dengan kredit jatuh tempo tentu saja)!
babelmonk
Ada kondisi balapan di sini: ketika Anda terhubung ke WiFi Anda memiliki jendela dua menit di mana TM akan mulai sebelum pemberitahuan skrip dan mematikannya.
Reid
1
Alih-alih memicu ini setiap 2 menit, Anda dapat memicu setiap kali ada perubahan dalam konfigurasi jaringan. Anda hanya perlu menggunakan launchddan mengatakannya untuk mencari perubahan pada /Library/Preferences/SystemConfiguration/folder. Saya punya contoh ini tersedia di github.com/tjluoma/onnetworkchange .
TJ Luoma
6

AppleScript ini akan memeriksa apakah koneksi Ethernet aktif, dan kemudian menjalankan cadangan Time Machine jika demikian.

Pertama, nonaktifkan Time Machine di System Preferences. Metode di bawah ini akan menjalankannya secara otomatis.

Saat terhubung ke Ethernet , Anda harus menjalankan satu perintah secara manual untuk mengonfirmasi antarmuka Ethernet mana yang ditugaskan. Jalankan perintah ini:

ifconfig

Seharusnya menampilkan layar yang penuh dengan informasi. Apa yang Anda cari adalah bagian yang berlabel ennomor setelahnya, dan yang baris terakhirnya adalah status: active, seperti ini:

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

Catat nomor di sebelah endi awal - ini adalah antarmuka yang menjalankan koneksi Ethernet Anda. Dalam skrip di bawah ini, di mana tertulis en9, ganti 9dengan angka dari atas. (Jika Anda memiliki Mac Pro, kemungkinan besar akan menjadi en0atau en1. Kalau tidak, kemungkinan besar akan menjadi 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

Simpan ini sebagai EthernetTimeMachine.scptke folder rumah Anda ( /Users/<yourusername>/).

Selanjutnya buka Terminal dan ketik perintah berikut:

pico ~/crontab

Ini akan membuka editor teks untuk memungkinkan Anda menjadwalkan skrip ini untuk dijalankan setiap jam, seperti halnya Time Machine secara default. Rekatkan baris ini:

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

Tekan control+ Xlalu ketik ydan tekan returnuntuk menyimpan dan keluar.

Untuk menonaktifkannya, kembali ke Terminal, gunakan lagi perintah:

pico ~/crontab

Kemudian hapus baris yang Anda tambahkan di atas dan gunakan langkah yang sama untuk menyimpan dan keluar.

tubedogg
sumber
Ah - ini luar biasa - terima kasih banyak! Satu pertanyaan - apakah saya perlu menonaktifkan mesin waktu? Atau sudahkah diaktifkan? Tentunya jika itu diaktifkan masih akan berjalan sesuai jadwal sendiri?
babelmonk
Sebuah pemikiran pada baris yang sama (maaf untuk kiriman ganda) - bisakah Anda tidak menjalankan sesuatu seperti ini: lwgat.blogspot.co.uk/2013/02/... untuk mengaktifkan / menonaktifkan mesin waktu, dan jalankan ini daripada @hourly tetapi pada jaringan ubah acara?
babelmonk
Anda ingin menonaktifkan Time Machine dalam pengaturannya sebelum melakukan ini. Sejauh memanfaatkan acara perubahan jaringan dan / atau mengaktifkan / menonaktifkan Time Machine, itu pasti bisa dilakukan. Saya akan melihat malam ini dan melemparkan sesuatu di jawaban lain.
tubedogg
Satu-satunya kelemahan untuk mendeteksi perubahan jaringan adalah Anda harus memiliki sesuatu yang terus berjalan di latar belakang untuk mendeteksinya.
tubedogg
-1

Anda dapat membuka Prefs Jaringan dan memastikan Ethernet adalah koneksi teratas dalam urutan layanan. Anda dapat melihat apa yang saya maksud di tangkapan layar ini, saya harap.

Kemudian, jika Ethernet terhubung Anda harus selalu menggunakannya sebagai koneksi utama Anda.

Lihat di sini untuk cara mengatur prioritas layanan: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/

pengguna55785
sumber
Terima kasih, saya mengerti bagian itu. Masalahnya adalah saya secara eksplisit perlu menonaktifkan backup ketika ethernet tidak terhubung. Saya kira saya bisa menulis AppleScript untuk en / nonaktifkan (sesuatu seperti ini: hints.macworld.com/article.php?story=20040222210724156 grepping dari ifconfig en0) ...
babelmonk