เปิด / ปิดการใช้งาน Time Machine ขึ้นอยู่กับประเภทการเชื่อมต่อเครือข่าย


9

ฉันไม่ได้ติดตั้ง Wi-Fi ที่ดีที่นี่ที่บ้านและบางครั้งก็ทำให้การสำรองข้อมูล Time Machine ล้มเหลว มีวิธีระบุว่า Time Machine สำรองข้อมูลในบางสถานการณ์เท่านั้น - เช่นการเชื่อมต่อ Ethernet ใช้งานอยู่ ... ?


ตัวเลือกไทม์แมชชีนที่ทำงานด้วยตนเองจะเป็นตัวเลือกหรือไม่?
Thorbjørn Ravn Andersen

ฉันไม่แน่ใจว่า 'การทำงานด้วยตนเอง' หมายถึงอะไร - หากเปิดใช้งานมันจะทำงานต่อไปฉันต้องเปิด / ปิดตามการกำหนดค่าเครือข่าย
babelmonk

ไอคอน Time Machine ในแถบสถานะมีรายการเมนู "Backup now" เมื่อคลิกขวา
Thorbjørn Ravn Andersen

คำตอบ:


6

นี่เป็นอีกทางเลือกหนึ่งของสคริปต์อื่นที่ฉันโพสต์ อันนี้ทำงานในพื้นหลังและทดสอบการเชื่อมต่อเครือข่ายทุกสองนาทีเพื่อตรวจสอบว่ามีการใช้การเชื่อมต่ออีเธอร์เน็ตหรือไร้สาย หากบนอีเธอร์เน็ตจะเปิดใช้งาน Time Machine เมื่อการเชื่อมต่อเปลี่ยนเป็นไร้สายจะเป็นการปิดการใช้งาน Time Machine

ขั้นตอนที่ 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ที่จุดเริ่มต้น - นี่คืออินเทอร์เฟซที่การเชื่อมต่อ Ethernet ของคุณกำลังทำงาน

ขั้นตอนที่ 2: สร้างแอปพลิเคชัน AppleScript

ในสคริปต์ด้านล่างที่มีข้อความระบุset wired_interface to "0"ให้เปลี่ยน0เป็นหมายเลขถัดจากenในเอาต์พุตด้านบน (ควรเป็น 0 ถ้าคุณใช้ Mac Pro อาจเป็น 1) นอกจากนี้ในสคริปต์ด้านล่างที่ด้านบนสุดที่ระบุmyusernameให้แทนที่ชื่อผู้ใช้ 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

+ sเพื่อบันทึก ในการบันทึกแผ่นคุณสมบัติตั้งค่าFile Formatเป็นและช่องสำหรับApplication Stay open after run handlerบันทึกทุกที่ที่คุณต้องการ - เดสก์ท็อปหรือโฟลเดอร์แอปพลิเคชัน - ไม่สำคัญเลยเพียงรู้ว่าคุณบันทึกไว้ที่ไหน

AppleScript Editor บันทึกกล่องโต้ตอบแสดงรูปแบบไฟล์ที่ตั้งค่าเป็นแอปพลิเคชันและทำเครื่องหมายในช่องว่าเปิดอยู่หลังจากเรียกใช้ตัวจัดการ

ขั้นตอนที่ 3: สร้างเชลล์สคริปต์

ถัดไปเปิด Terminal พิมพ์คำสั่งต่อไปนี้:

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ให้ทำงานโดยไม่มีรหัสผ่าน

การปล่อยให้คำสั่ง Terminal sudoรันโดยไม่มีรหัสผ่านอาจเป็นอันตรายได้ นั่นเป็นสาเหตุที่ขั้นตอนข้างต้นสร้างเชลล์สคริปต์ในไดเรกทอรีของตนเองดังนั้นสิ่งที่สามารถรันได้จริงมีอยู่อย่าง จำกัด

ป้อนคำสั่งต่อไปนี้ในเทอร์มินัล:

sudo pico /etc/sudoers

จากนั้นป้อนรหัสผ่านผู้ดูแลระบบของคุณเมื่อได้รับแจ้ง

สิ่งนี้อาจนำคุณไปสู่หน้าจอว่างเปล่า (ส่วนใหญ่) หรืออาจมีข้อความอยู่ในนั้น ถ้ามันว่างเปล่า - ก็ไม่เป็นไร คุณจะวางบรรทัดด้านล่างที่ด้านบน หากข้อความมีอยู่แล้วนั่นก็ใช้ได้เช่นกัน ใช้ลูกศรลงของคุณเพื่อไปใต้บรรทัดที่มีอยู่แล้วใน# User privilege specificationส่วนตามที่เห็นในภาพด้านล่าง

ภาพหน้าจอเทอร์มินัลแสดงไฟล์ sudoers ที่เปิดใน Pico

ที่นี่เพิ่มบรรทัดต่อไปนี้:

<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 และเลือก Quit)


ว้าวนี่เป็นสิ่งที่น่าอัศจรรย์ - ฉันจะต้องแน่ใจว่าได้ตรวจสอบและวางผลลัพธ์ของฉันที่นี่ - ฉันอาจติดมันใน GitHub (ด้วยเครดิตที่แน่นอน)
babelmonk

มีเงื่อนไขการแข่งขันอยู่ที่นี่: เมื่อคุณเชื่อมต่อกับ WiFi คุณมีหน้าต่างสองนาทีที่ TM อาจเริ่มต้นก่อนที่สคริปต์จะสังเกตเห็นและปิดการทำงาน
เรด

1
แทนที่จะทริกเกอร์สิ่งนี้ทุก 2 นาทีคุณสามารถเรียกใช้เมื่อใดก็ตามที่มีการเปลี่ยนแปลงในการกำหนดค่าเครือข่าย คุณต้องใช้launchdและบอกให้ค้นหาการเปลี่ยนแปลงใด ๆ ใน/Library/Preferences/SystemConfiguration/โฟลเดอร์ ผมมีตัวอย่างนี้สามารถใช้ได้ในgithub.com/tjluoma/onnetworkchange
TJ Luoma

6

AppleScript นี้จะตรวจสอบว่าการเชื่อมต่ออีเธอร์เน็ตเปิดใช้งานอยู่หรือไม่จากนั้นเรียกใช้การสำรองข้อมูล Time Machine หากเป็นเช่นนั้น

ก่อนอื่นให้ปิดการใช้งาน Time Machine ในการตั้งค่าระบบ วิธีการด้านล่างจะทำงานโดยอัตโนมัติ

ในขณะที่เชื่อมต่อกับอีเธอร์เน็ตคุณจะต้องเรียกใช้หนึ่งคำสั่งด้วยตนเองเพื่อยืนยันว่าอีเธอร์เน็ตอินเตอร์เฟสใดถูกกำหนดให้ เรียกใช้คำสั่งนี้:

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ที่จุดเริ่มต้น - นี่คืออินเทอร์เฟซที่การเชื่อมต่อ Ethernet ของคุณกำลังทำงาน ในสคริปต์ด้านล่างซึ่งมีข้อความระบุว่าen9แทนที่9ด้วยหมายเลขจากด้านบน (หากคุณมี 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>/)

ถัดไปเปิด Terminal และพิมพ์คำสั่งต่อไปนี้:

pico ~/crontab

สิ่งนี้จะเปิดตัวแก้ไขข้อความเพื่อให้คุณสามารถกำหนดเวลาให้สคริปต์นี้ทำงานเป็นรายชั่วโมงเหมือนกับที่ Time Machine ทำตามค่าเริ่มต้น วางบรรทัดนี้:

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

กดcontrol+ Xจากนั้นพิมพ์yและกดreturnเพื่อบันทึกและออก

หากต้องการปิดการใช้งานให้กลับไปที่ Terminal ใช้คำสั่งอีกครั้ง

pico ~/crontab

จากนั้นลบบรรทัดที่คุณเพิ่มด้านบนและใช้ขั้นตอนเดียวกันเพื่อบันทึกและออก


อ่า - มันยอดเยี่ยมมากขอบคุณมาก! คำถามหนึ่ง - ฉันต้องปิดการใช้งานเครื่องเวลาหรือไม่ หรือเปิดใช้งานหรือไม่ แน่นอนว่าถ้าเปิดใช้งานอยู่จะยังคงทำงานตามกำหนดเวลาของตัวเองหรือไม่
babelmonk

ความคิดในบรรทัดที่คล้ายกัน (ขออภัยสำหรับการโพสต์สองครั้ง) - คุณไม่สามารถเรียกใช้สิ่งนี้: lwgat.blogspot.co.uk/2013/02/ ......เพื่อเปิด / ปิดการใช้งานไทม์แมชชีนและใช้งานได้มากกว่า @hourly แต่บนเครือข่าย เปลี่ยนกิจกรรมหรือไม่
babelmonk

คุณต้องการปิดการใช้งาน Time Machine ในการตั้งค่าก่อนที่จะทำสิ่งนี้ เท่าที่ใช้เหตุการณ์การเปลี่ยนแปลงเครือข่ายและ / หรือการเปิด / ปิดการใช้งาน Time Machine นั่นเป็นไปได้อย่างแน่นอน ฉันจะดูคืนนี้และโยนบางสิ่งบางอย่างเข้าด้วยกันในคำตอบอื่น
tubedogg

ข้อเสียอย่างหนึ่งของการตรวจสอบการเปลี่ยนแปลงเครือข่ายคือคุณต้องมีบางสิ่งบางอย่างที่ทำงานอยู่ในพื้นหลังอย่างต่อเนื่องเพื่อตรวจจับ
tubedogg

-1

คุณสามารถเปิดการตั้งค่าเครือข่ายและตรวจสอบให้แน่ใจว่า Ethernet คือการเชื่อมต่อสูงสุดในใบสั่งงานบริการ คุณสามารถเห็นสิ่งที่ฉันหมายถึงในภาพหน้าจอนี้ฉันหวังว่า

จากนั้นหากเชื่อมต่อ Ethernet คุณควรใช้มันเป็นการเชื่อมต่อหลักของคุณ

ดูที่นี่สำหรับวิธีตั้งค่าลำดับความสำคัญของบริการ: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/


ขอบคุณฉันเข้าใจชิ้นนั้น ปัญหาคือฉันต้องปิดการสำรองข้อมูลอย่างชัดเจนเมื่อไม่ได้เชื่อมต่ออีเธอร์เน็ต ผมคิดว่าผมสามารถเขียน AppleScript เพื่อ en / ปิดการใช้งาน (บางอย่างเช่นนี้hints.macworld.com/article.php?story=20040222210724156 grepping จาก ifconfig en0) ...
babelmonk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.