Ağ bağlantı türüne bağlı olarak Time Machine'i etkinleştirme / devre dışı bırakma


9

Evde büyük bir Wi-Fi kurulumum yok ve bazen başarısız Time Machine yedeklemelerine neden oluyor. Time Machine'in yalnızca belirli durumlarda yedekleneceğini belirtmenin bir yolu var mı - yani Ethernet bağlantısı etkin ...


Manuel olarak çalışan zaman makinesi bir seçenek olabilir mi?
Thorbjørn Ravn Andersen

'Manuel olarak çalıştırmanın' ne anlama geldiğinden emin değilim - eğer etkinleştirilirse, yine de çalışırsa, ideal olarak ağ yapılandırmalarına göre açıp kapatmam gerekir.
babelmonk

Durum çubuğundaki Time Machine simgesinin sağ tıklandığında "Şimdi yedekle" menü girişi vardır.
Thorbjørn Ravn Andersen

Yanıtlar:


6

Bu gönderdiğim diğer betiğe bir alternatif. Bu arka planda çalışır ve bir Ethernet bağlantısı veya kablosuz kullanıp kullanmadığını belirlemek için ağ bağlantısını iki dakikada bir test eder. Ethernet üzerindeyse, Time Machine'i etkinleştirir; bağlantı kablosuz ağa geçtiğinde Time Machine'i devre dışı bırakır.

Adım 1: Sistem Kontrolü

Ethernet'e bağlıyken, Ethernet'in hangi arabirime atandığını doğrulamak için bir komutu manuel olarak çalıştırmanız gerekir. Bu komutu çalıştırın:

ifconfig

Bilgi dolu bir ekran çıkarmalıdır. Aradığınız, enondan sonraki bir sayı ile etiketlenmiş ve son satırı şöyledir status: 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

enBaşlangıçtaki numarayı not edin - bu, Ethernet bağlantınızın üzerinde çalıştığı arabirimdir.

2. Adım: AppleScript Uygulamasını oluşturma

Aşağıdaki komut dosyasında , yukarıdaki çıktıda yanındaki sayı olarak set wired_interface to "0"değiştirin . (0 olmalıdır; Mac Pro'daysanız, 1 olabilir.) Ayrıca aşağıdaki komut dosyasında, yazdığı en üstte kendi Mac kullanıcı adınızı yazın.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

+ skaydedin. Kaydet özellik sayfasında, File Formatas değerini ayarlayın Applicationve onay kutusunu işaretleyin Stay open after run handler. İstediğiniz yere kaydedin - Masaüstü veya Uygulama Klasörü - gerçekten önemli değil, sadece nereye kaydettiğinizi bilin.

Uygulamaya ayarlanmış Dosya Biçimini gösteren AppleScript Editor Kaydet iletişim kutusu ve çalıştırma işleyicisinden sonra açık kal seçeneği işaretli

Adım 3: Kabuk Komut Dosyalarını Oluşturma

Ardından Terminal'i açın. Aşağıdaki komutları yazın:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

Aşağıdaki satırı yapıştırın:

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

control+ Tuşuna basın x, yazın yve returnkaydetmek ve çıkmak için tuşuna basın . Ardından şu komutu çalıştırın:

pico TM_Off.csh

Ve bu dosyaya aşağıdaki satırı yapıştırın:

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

Yine, control+ x, sonra yve returnkaydedip çıkmak için.

Ardından, şu komutları girin:

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

4. Adım: sudoParola Olmadan Çalışacak Şekilde Ayarlama

Terminal komutunun sudoparola olmadan çalıştırılması çok tehlikeli olabilir. Bu nedenle yukarıdaki adımlar kendi dizinlerinde kabuk komut dosyaları oluşturduğundan, gerçekte çalıştırılabilecek şeyler sınırlıdır.

Terminal'e aşağıdaki komutu girin:

sudo pico /etc/sudoers

Ardından istendiğinde yönetici parolanızı girin.

Bu sizi (çoğunlukla) boş bir ekrana getirebilir veya içinde bazı metinler olabilir. Boşsa - sorun değil. Aşağıdaki satırı en üste yapıştırmanız yeterlidir. Metin zaten varsa, bu da iyidir; # User privilege specificationaşağıdaki ekran görüntüsünde görüldüğü gibi , bölümdeki satırların hemen altına gitmek için aşağı okunuzu kullanın .

Sudoers dosyasını Pico'da açık gösteren terminal ekran görüntüsü

Buraya aşağıdaki satırı ekleyin:

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

Görünen her iki yerde de <yourusername>Mac kullanıcı adınızla değiştirin. control+ Tuşuna basın x, yazın yve returnkaydetmek ve çıkmak için tuşuna basın .

Aşağıdaki komutu çalıştırarak bu dosyaların Time Machine'i açıp kapadığını test edin (Time Machine'in şu anda açık olduğu varsayılarak):

sudo ./TM_Off.csh

Bir süre sonra menü çubuğundaki Zaman Makinesi simgesi, Zaman Makinesi'nin kapalı olduğunu belirten gri renkte olmalıdır. (Değişikliği yansıtması için simgeyi tıklamanız gerekebilir). Bu işe yararsa, şu komutu çalıştırın:

sudo ./TM_On.csh

Ve Time Machine yeniden etkinleştirilmelidir.

Ve sen git

Yukarıdaki AppleScript Editor'da oluşturduğunuz uygulamayı çalıştırın, bağlantınız Ethernet'ten kablosuz ağa ve arkaya geçerken Time Machine'i etkinleştirir ve devre dışı bırakır. Geçişi devre dışı bırakmak için AppleScript uygulamasını kapatın (Dock'taki simgeye sağ tıklayın ve Quit'i seçin).


Vay canına, bu inanılmaz - içine bakacağım ve sonuçlarımı buraya yapıştıracağımdan emin olabilirim - GitHub'a bile yapıştırabilirim (elbette gerekli krediyle)!
babelmonk

Burada bir yarış koşulu var: WiFi'ye bağlandığınızda, TM'nin komut dosyası fark etmeden ve kapatmadan önce başlayabileceği iki dakikalık bir pencereniz var.
Reid

1
Bunu her 2 dakikada bir tetiklemek yerine, ağ yapılandırmasında bir değişiklik olduğunda tetikleyebilirsiniz. Klasörde launchdherhangi bir değişiklik olup olmadığını görmek için kullanmanız ve söylemeniz /Library/Preferences/SystemConfiguration/yeterlidir. Bunun bir örneğini github.com/tjluoma/onnetworkchange adresinde bulabilirsiniz .
TJ Luoma

6

Bu AppleScript, Ethernet bağlantısının etkin olup olmadığını kontrol eder ve varsa bir Time Machine yedeklemesi çalıştırır.

İlk olarak, Sistem Tercihleri'nde Time Machine'i devre dışı bırakın. Aşağıdaki yöntem otomatik olarak çalışacaktır.

Ethernet'e bağlıyken, Ethernet'in hangi arabirime atandığını doğrulamak için bir komutu manuel olarak çalıştırmanız gerekir. Bu komutu çalıştırın:

ifconfig

Bilgi dolu bir ekran çıkarmalıdır. Aradığınız, enondan sonraki bir sayı ile etiketlenmiş ve son satırı şöyledir status: 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

enBaşlangıçtaki numarayı not edin - bu, Ethernet bağlantınızın üzerinde çalıştığı arabirimdir. Aşağıdaki komut dosyasında , yukarıdaki sayı ile en9değiştirin 9. (Bir Mac Pro'nuz varsa, büyük olasılıkla en0veya olacaktır en1. Aksi takdirde, büyük olasılıkla olacaktır 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

Bunu EthernetTimeMachine.scptana klasörünüze ( /Users/<yourusername>/) kaydedin .

Sonra Terminal'i açın ve aşağıdaki komutu yazın:

pico ~/crontab

Bu, Time Machine'in varsayılan olarak yaptığı gibi, bu komut dosyasını saatlik olarak çalışacak şekilde zamanlamanıza izin veren bir metin düzenleyici açar. Bu satırı yapıştırın:

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

control+ XTuşlarına basın ve ardından kaydetmek ve çıkmak için ytuşuna basın return.

Devre dışı bırakmak için Terminal'e geri dönün, şu komutu kullanın:

pico ~/crontab

Ardından, yukarıda eklediğiniz satırı silin ve kaydetmek ve çıkmak için aynı adımları uygulayın.


Ah - bu harika - çok teşekkürler! Bir soru - zaman makinesini devre dışı bırakmam gerekir mi? Yoksa etkinleştirildi mi? Şüphesiz, etkinleştirilirse hala kendi programında çalışır mı?
babelmonk

Benzer satırlarda bir düşünce (çift yazı için üzgünüm) - böyle bir şeyi çalıştıramazdınız: lwgat.blogspot.co.uk/2013/02/… zaman makinesini etkinleştirmek / devre dışı bırakmak ve bunu @hourly yerine ağda çalıştırmak için olay değiştirilsin mi?
babelmonk

Bunu yapmadan önce Time Machine'i ayarlarından devre dışı bırakmak istersiniz. Bir ağ değiştirme olayı kullanmak ve / veya Time Machine'i etkinleştirmek / devre dışı bırakmak kadar, bu kesinlikle yapılabilir. Bu gece bir göz atacağım ve başka bir cevapta bir şeyler atacağım.
tubedogg

Bir ağ değişikliğini tespit etmenin bir dezavantajı, onu tespit etmek için arka planda sürekli çalışan bir şeyin olması gerektiğidir.
tubedogg

-1

Ağ Tercihlerini açabilir ve Ethernet'in servis siparişinde en üst bağlantı olduğundan emin olun. Bu ekran görüntüsünde ne demek istediğimi görebilirsiniz, umarım.

Ardından, Ethernet bağlıysa, onu her zaman birincil bağlantınız olarak kullanmalısınız.

Hizmet önceliğini nasıl ayarlayacağınız için buraya bakın: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/


Teşekkürler, o parçayı anlıyorum. Sorun açıkça ethernet bağlı değilken yedeklemeleri devre dışı bırakmanız gerekir. Sanırım bunu etkinleştirmek / devre dışı bırakmak için bir AppleScript yazabilirim (böyle bir şey: hints.macworld.com/article.php?story=20040222210724156 ifconfig en0'dan selamlıyor) ...
babelmonk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.