ฉันไม่ได้ติดตั้ง Wi-Fi ที่ดีที่นี่ที่บ้านและบางครั้งก็ทำให้การสำรองข้อมูล Time Machine ล้มเหลว มีวิธีระบุว่า Time Machine สำรองข้อมูลในบางสถานการณ์เท่านั้น - เช่นการเชื่อมต่อ Ethernet ใช้งานอยู่ ... ?
ฉันไม่ได้ติดตั้ง Wi-Fi ที่ดีที่นี่ที่บ้านและบางครั้งก็ทำให้การสำรองข้อมูล Time Machine ล้มเหลว มีวิธีระบุว่า Time Machine สำรองข้อมูลในบางสถานการณ์เท่านั้น - เช่นการเชื่อมต่อ Ethernet ใช้งานอยู่ ... ?
คำตอบ:
นี่เป็นอีกทางเลือกหนึ่งของสคริปต์อื่นที่ฉันโพสต์ อันนี้ทำงานในพื้นหลังและทดสอบการเชื่อมต่อเครือข่ายทุกสองนาทีเพื่อตรวจสอบว่ามีการใช้การเชื่อมต่ออีเธอร์เน็ตหรือไร้สาย หากบนอีเธอร์เน็ตจะเปิดใช้งาน 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 ของคุณกำลังทำงาน
ในสคริปต์ด้านล่างที่มีข้อความระบุ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
บันทึกทุกที่ที่คุณต้องการ - เดสก์ท็อปหรือโฟลเดอร์แอปพลิเคชัน - ไม่สำคัญเลยเพียงรู้ว่าคุณบันทึกไว้ที่ไหน
ถัดไปเปิด 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
sudo
ให้ทำงานโดยไม่มีรหัสผ่านการปล่อยให้คำสั่ง Terminal sudo
รันโดยไม่มีรหัสผ่านอาจเป็นอันตรายได้ นั่นเป็นสาเหตุที่ขั้นตอนข้างต้นสร้างเชลล์สคริปต์ในไดเรกทอรีของตนเองดังนั้นสิ่งที่สามารถรันได้จริงมีอยู่อย่าง จำกัด
ป้อนคำสั่งต่อไปนี้ในเทอร์มินัล:
sudo pico /etc/sudoers
จากนั้นป้อนรหัสผ่านผู้ดูแลระบบของคุณเมื่อได้รับแจ้ง
สิ่งนี้อาจนำคุณไปสู่หน้าจอว่างเปล่า (ส่วนใหญ่) หรืออาจมีข้อความอยู่ในนั้น ถ้ามันว่างเปล่า - ก็ไม่เป็นไร คุณจะวางบรรทัดด้านล่างที่ด้านบน หากข้อความมีอยู่แล้วนั่นก็ใช้ได้เช่นกัน ใช้ลูกศรลงของคุณเพื่อไปใต้บรรทัดที่มีอยู่แล้วใน# User privilege specification
ส่วนตามที่เห็นในภาพด้านล่าง
ที่นี่เพิ่มบรรทัดต่อไปนี้:
<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)
launchd
และบอกให้ค้นหาการเปลี่ยนแปลงใด ๆ ใน/Library/Preferences/SystemConfiguration/
โฟลเดอร์ ผมมีตัวอย่างนี้สามารถใช้ได้ในgithub.com/tjluoma/onnetworkchange
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
จากนั้นลบบรรทัดที่คุณเพิ่มด้านบนและใช้ขั้นตอนเดียวกันเพื่อบันทึกและออก
คุณสามารถเปิดการตั้งค่าเครือข่ายและตรวจสอบให้แน่ใจว่า Ethernet คือการเชื่อมต่อสูงสุดในใบสั่งงานบริการ คุณสามารถเห็นสิ่งที่ฉันหมายถึงในภาพหน้าจอนี้ฉันหวังว่า
จากนั้นหากเชื่อมต่อ Ethernet คุณควรใช้มันเป็นการเชื่อมต่อหลักของคุณ
ดูที่นี่สำหรับวิธีตั้งค่าลำดับความสำคัญของบริการ: http://osxdaily.com/2013/06/15/set-network-connection-priority-mac-os-x/