नेटवर्क कनेक्शन प्रकार के आधार पर टाइम मशीन को सक्षम / अक्षम करें


9

मुझे यहाँ घर पर एक बढ़िया वाई-फाई सेटअप नहीं मिला है और कभी-कभी यह असफल समय मशीन बैकअप में परिणाम देता है। क्या यह निर्दिष्ट करने का एक तरीका है कि टाइम मशीन केवल कुछ विशेष परिस्थितियों में ही बैकअप लेती है - अर्थात ईथरनेट कनेक्शन सक्रिय है ...?


क्या मैन्युअल रूप से चलने वाली टाइम मशीन एक विकल्प होगी?
Thorbjørn रावन एंडरसन

मुझे यकीन नहीं है कि 'मैन्युअल रूप से चलने' का क्या मतलब है - अगर यह सक्षम है तो यह वैसे भी चलेगा, मुझे इसे नेटवर्क कॉन्फ़िगरेशन के अनुसार, चालू / बंद करना होगा।
babelmonk

स्टेटस बार में टाइम मशीन आइकन में राइट क्लिक होने पर "बैकअप नाउ" मेनू एंट्री होती है।
थोरबजोरन रावन एंडरसन

जवाबों:


6

यह मेरे द्वारा पोस्ट की गई अन्य स्क्रिप्ट का एक विकल्प है। यह एक पृष्ठभूमि में चलता है और नेटवर्क कनेक्शन का हर दो मिनट में यह निर्धारित करने के लिए परीक्षण करता है कि क्या यह ईथरनेट कनेक्शन या वायरलेस का उपयोग कर रहा है। यदि ईथरनेट पर, यह टाइम मशीन को सक्षम करता है; जब कनेक्शन वायरलेस पर स्विच होता है तो यह टाइम मशीन को निष्क्रिय कर देता है।

चरण 1: सिस्टम की जाँच

ईथरनेट से कनेक्ट होने के दौरान, आपको यह पुष्टि करने के लिए मैन्युअल रूप से एक कमांड चलाने की आवश्यकता होगी कि ईथरनेट किस इंटरफेस को सौंपा गया है। यह आदेश चलाएँ:

ifconfig

यह जानकारी से भरी स्क्रीन का उत्पादन करना चाहिए। आप जिस चीज की तलाश कर रहे हैं en, वह उसके बाद वाले नंबर के साथ लेबल किया गया अनुभाग है, और जिसकी अंतिम पंक्ति 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

enशुरुआत में आगे की संख्या पर ध्यान दें - यह वह इंटरफ़ेस है जिस पर आपका ईथरनेट कनेक्शन चल रहा है।

चरण 2: AppleScript एप्लिकेशन बनाएं

नीचे दी गई स्क्रिप्ट में, जहां यह कहता है set wired_interface to "0", उपरोक्त आउटपुट में 0अगली संख्या में परिवर्तन करें en। (यह 0 होना चाहिए; यदि आप एक मैक प्रो पर हैं, तो यह 1 हो सकता है।) इसके अलावा नीचे की स्क्रिप्ट में, शीर्ष पर जहां यह कहता है myusername, अपने स्वयं के मैक उपयोगकर्ता नाम को प्रतिस्थापित करें।

-- 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 Formatके रूप में Application, और के लिए बॉक्स चेक Stay open after run handler। इसे जहाँ भी आप चाहें - डेस्कटॉप, या एप्लिकेशन फ़ोल्डर में सहेजें - यह वास्तव में कोई फर्क नहीं पड़ता, बस यह जान लें कि आपने इसे कहाँ सहेजा है।

AppleScript Editor सेव डायलॉग बॉक्स को एप्लिकेशन में फाइल फॉर्मेट सेट दिखा रहा है, और रन हैंडलर के बाद स्टे ओपन के लिए चेक बॉक्स

चरण 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>यह दिखाई देता है, इसे अपने मैक उपयोगकर्ता नाम से बदलें। प्रेस control+ x, टाइप करें yऔर returnसहेजने और बाहर निकलने के लिए दबाएं ।

परीक्षण करें कि ये फाइलें निम्नलिखित कमांड चलाकर टाइम मशीन को चालू करती हैं (वर्तमान में टाइम मशीन चालू है):

sudo ./TM_Off.csh

एक पल के बाद मेनूबार में टाइम मशीन का आइकन ग्रे हो जाना चाहिए, यह दर्शाता है कि टाइम मशीन बंद है। (आपको परिवर्तन को प्रतिबिंबित करने के लिए आइकन पर क्लिक करने की आवश्यकता हो सकती है)। इस कार्य को मानते हुए, यह कमांड चलाएँ:

sudo ./TM_On.csh

और टाइम मशीन को फिर से सक्षम होना चाहिए।

और ऑफ यू गो

ऊपर दिए गए AppleScript संपादक में आपके द्वारा बनाए गए एप्लिकेशन को चलाएं, और यह खुलेगा, सक्षम करने और टाइम मशीन को सक्षम करने से और आपके कनेक्शन को ईथरनेट से वायरलेस और बैक पर स्विच करने के रूप में। स्विचिंग को अक्षम करने के लिए, बस AppleScript एप्लिकेशन को बंद करें (डॉक में आइकन पर राइट-क्लिक करें और क्विट चुनें)।


वाह, यह अद्भुत है - मैं इसे देखने और अपने परिणामों को यहां पेस्ट करने के लिए सुनिश्चित होऊंगा - मैं इसे गीथहब (पाठ्यक्रम के उचित क्रेडिट के साथ) में भी चिपका सकता हूं!
babelmonk

यहां एक दौड़ की स्थिति है: जब आप वाईफाई से कनेक्ट करते हैं तो आपके पास दो मिनट की खिड़की होती है जिसमें टीएम स्क्रिप्ट नोटिस से पहले शुरू हो सकती है और इसे बंद कर सकती है।
रीड

1
इसे हर 2 मिनट में ट्रिगर करने के बजाय, आप इसे तब भी ट्रिगर कर सकते हैं जब नेटवर्क कॉन्फ़िगरेशन में कोई बदलाव हो। आपको केवल फ़ोल्डर के launchdकिसी भी परिवर्तन को देखने के लिए इसका उपयोग करना और उसे बताना है /Library/Preferences/SystemConfiguration/। इसका एक उदाहरण github.com/tjluoma/onnetworkchange पर उपलब्ध है ।
टीजे लुओमा

6

यह AppleScript जाँच करेगा कि ईथरनेट कनेक्शन सक्रिय है या नहीं, और यदि ऐसा है तो टाइम मशीन बैकअप चलाएं।

सबसे पहले, सिस्टम प्राथमिकता में टाइम मशीन को अक्षम करें। नीचे दी गई विधि इसे स्वचालित रूप से चलाएगी।

ईथरनेट से कनेक्ट होने के दौरान , आपको यह पुष्टि करने के लिए मैन्युअल रूप से एक कमांड चलाने की आवश्यकता होगी कि ईथरनेट किस इंटरफेस को सौंपा गया है। यह आदेश चलाएँ:

ifconfig

यह जानकारी से भरी स्क्रीन का उत्पादन करना चाहिए। आप जिस चीज की तलाश कर रहे हैं en, वह उसके बाद वाले नंबर के साथ लेबल किया गया अनुभाग है, और जिसकी अंतिम पंक्ति 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

enशुरुआत में आगे की संख्या पर ध्यान दें - यह वह इंटरफ़ेस है जिस पर आपका ईथरनेट कनेक्शन चल रहा है। नीचे दी गई स्क्रिप्ट में, जहां यह कहता है en9, 9ऊपर से संख्या के साथ बदलें । (यदि आपके पास एक मैक प्रो है, तो यह सबसे अधिक संभावना होगी 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

यह एक टेक्स्ट एडिटर को खोलेगा जो आपको इस स्क्रिप्ट को एक घंटे के आधार पर चलाने की अनुमति देगा, जैसे टाइम मशीन डिफ़ॉल्ट रूप से करता है। इस पंक्ति को चिपकाएँ:

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

प्रेस control+ Xतब टाइप करें yऔर returnसहेजने और बाहर निकलने के लिए दबाएं ।

इसे अक्षम करने के लिए, टर्मिनल में वापस जाएं, फिर से कमांड का उपयोग करें:

pico ~/crontab

फिर आपके द्वारा ऊपर दी गई लाइन को हटा दें और सहेजने और बाहर निकलने के लिए समान चरणों का उपयोग करें।


आह - यह बहुत बढ़िया है - बहुत बहुत धन्यवाद! एक प्रश्न - क्या मुझे टाइम मशीन को निष्क्रिय करने की आवश्यकता है? या यह सक्षम है? निश्चित रूप से अगर यह सक्षम है तो यह अभी भी अपने समय पर चलेगा?
babelmonk

इसी तरह की तर्ज पर एक विचार (डबल पोस्ट के लिए खेद है) - क्या आप इस तरह से कुछ नहीं चला सकते थे: lwgat.blogspot.co.uk/2013/02/… / टाइम मशीन को सक्षम / अक्षम करने के लिए, और इसके बजाय @hourly पर नेटवर्क चलाएं परिवर्तन घटना?
बेबेलमॉन्क

आप ऐसा करने से पहले इसकी सेटिंग में टाइम मशीन को अक्षम करना चाहते हैं। जहाँ तक एक नेटवर्क परिवर्तन घटना और / या टाइम मशीन को सक्षम / अक्षम करने का उपयोग है, यह निश्चित रूप से उल्लेखनीय है। मैं आज रात देखूंगा और दूसरे उत्तर में कुछ फेंक दूंगा।
ट्यूबडॉग

एक नेटवर्क परिवर्तन का पता लगाने के लिए एक नुकसान यह है कि आपको पृष्ठभूमि का पता लगाने के लिए लगातार कुछ चलाना होगा।
ट्यूबडॉग

-1

आप नेटवर्क वरीयताएँ खोल सकते हैं और सुनिश्चित कर सकते हैं कि ईथरनेट सेवा क्रम में शीर्ष कनेक्शन है। आप देख सकते हैं कि इस स्क्रीनशॉट में मेरा क्या मतलब है, मुझे उम्मीद है।

फिर, यदि ईथरनेट जुड़ा हुआ है, तो आपको इसे हमेशा अपने प्राथमिक कनेक्शन के रूप में उपयोग करना चाहिए।

सेवा प्राथमिकता निर्धारित करने के तरीके के लिए यहां देखें: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/


धन्यवाद, मैं उस टुकड़े को समझता हूं। समस्या यह है कि मुझे स्पष्ट रूप से बैकअप को अक्षम करने की आवश्यकता है जब ईथरनेट जुड़ा नहीं है। मुझे लगता है कि मैं इसे / अक्षम करने के लिए AppleScript लिख सकता हूं (कुछ इस तरह: hints.macworld.com/article.php?story=20040222210724156 ifconfig en0 से grepping) ...
babelk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.