Bật / tắt Time Machine tùy thuộc vào loại kết nối mạng


9

Tôi đã không có một thiết lập Wi-Fi tuyệt vời ở đây tại nhà và đôi khi nó dẫn đến việc sao lưu Time Machine không thành công. Có cách nào để chỉ định rằng Time Machine chỉ sao lưu trong một số trường hợp nhất định - tức là kết nối Ethernet đang hoạt động ...?


Sẽ tự tay chạy máy thời gian là một lựa chọn?
Thorbjørn Ravn Andersen

Tôi không chắc 'chạy thủ công' nghĩa là gì - nếu nó được kích hoạt thì nó vẫn chạy, tôi cần bật / tắt theo cấu hình mạng, lý tưởng nhất.
babelmonk

Biểu tượng Time Machine trong thanh trạng thái có mục menu "Sao lưu ngay" khi nhấp chuột phải.
Thorbjørn Ravn Andersen

Câu trả lời:


6

Đây là một thay thế cho các kịch bản khác tôi đã đăng. Cái này chạy trong nền và kiểm tra kết nối mạng cứ sau hai phút để xác định xem nó đang sử dụng kết nối Ethernet hay không dây. Nếu trên Ethernet, nó kích hoạt Time Machine; khi kết nối chuyển sang không dây, nó sẽ vô hiệu hóa Time Machine.

Bước 1: Kiểm tra hệ thống

Trong khi kết nối với Ethernet, bạn sẽ cần chạy một lệnh thủ công để xác nhận Ethernet giao diện nào được gán cho. Chạy lệnh này:

ifconfig

Nó sẽ xuất ra một màn hình đầy đủ thông tin. Những gì bạn đang tìm kiếm là một phần được gắn nhãn envới một số sau nó, và dòng cuối cùng của nó là status: activenhư thế này:

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

Lưu ý số bên cạnh enlúc đầu - đây là giao diện mà kết nối Ethernet của bạn đang chạy.

Bước 2: Tạo Ứng dụng AppleScript

Trong đoạn script bên dưới, nơi nó nói set wired_interface to "0", thay đổi 0số bên cạnh entrong đầu ra ở trên. (Nó phải là 0, nếu bạn đang ở trên một máy Mac Pro, nó có thể là 1.) Cũng trong bên dưới kịch bản, ở phía trên nơi nó nói myusername, thay tên Mac của riêng bạn.

-- 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để tiết kiệm. Trong trang thuộc tính Save, đặt File Formatas Applicationvà chọn hộp cho Stay open after run handler. Lưu nó bất cứ nơi nào bạn thích - Máy tính để bàn hoặc Thư mục ứng dụng - thực sự không quan trọng, chỉ cần biết bạn đã lưu nó ở đâu.

Hộp thoại AppleScript Editor Save hiển thị Định dạng tệp được đặt thành Ứng dụng và hộp được chọn để Mở sau khi chạy trình xử lý

Bước 3: Tạo tập lệnh Shell

Tiếp theo, mở Terminal. Nhập các lệnh sau:

cd ~/
mkdir TMSwitch
cd TMSwitch
pico TM_On.csh

Dán dòng sau vào:

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

Nhấn control+ x, gõ yvà nhấn returnđể lưu và thoát. Sau đó chạy lệnh này:

pico TM_Off.csh

Và trong tập tin này dán dòng sau:

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

Một lần nữa, control+ x, sau đó yreturnđể lưu và thoát.

Tiếp theo, nhập các lệnh sau:

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

Bước 4: Thiết lập sudođể chạy mà không cần mật khẩu

Để lệnh Terminal sudochạy mà không có mật khẩu có thể rất nguy hiểm. Đó là lý do tại sao các bước trên tạo ra các tập lệnh shell trong thư mục riêng của chúng, vì vậy những gì thực sự có thể chạy được giới hạn.

Nhập lệnh sau trong Terminal:

sudo pico /etc/sudoers

Sau đó nhập mật khẩu quản trị viên của bạn khi được nhắc.

Điều này có thể đưa bạn đến một màn hình trống (hầu hết) hoặc nó có thể có một số văn bản trong đó. Nếu nó trống - điều đó tốt. Bạn sẽ chỉ cần dán dòng dưới đây ở trên cùng. Nếu văn bản đã tồn tại, điều đó cũng tốt; sử dụng mũi tên xuống của bạn để đi ngay bên dưới các dòng đã có trong # User privilege specificationphần, như được thấy trong ảnh chụp màn hình bên dưới.

Ảnh chụp màn hình thiết bị đầu cuối hiển thị tệp sudoers mở trong Pico

Tại đây, thêm dòng sau:

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

Ở cả hai nơi <yourusername>xuất hiện, thay thế nó bằng tên người dùng Mac của bạn. Nhấn control+ x, gõ yvà nhấn returnđể lưu và thoát.

Kiểm tra xem các tệp này có bật và tắt Time Machine không bằng cách chạy lệnh sau (giả sử Time Machine hiện đang bật):

sudo ./TM_Off.csh

Sau một lát, biểu tượng Time Machine trong thanh thực đơn sẽ chuyển sang màu xám, cho biết Time Machine đã tắt. (Bạn có thể cần nhấp vào biểu tượng cho nó để phản ánh sự thay đổi). Giả sử công việc này, chạy lệnh này:

sudo ./TM_On.csh

Và Time Machine nên được kích hoạt lại.

Và tắt bạn đi

Chạy ứng dụng bạn đã tạo trong AppleScript Editor ở trên và ứng dụng sẽ vẫn mở, bật và tắt Time Machine khi kết nối của bạn chuyển từ Ethernet sang không dây và trở lại. Để tắt chuyển đổi, chỉ cần đóng ứng dụng AppleScript (nhấp chuột phải vào biểu tượng trong Dock và chọn Thoát).


Ồ, điều này thật tuyệt vời - tôi chắc chắn sẽ xem xét và dán kết quả của mình vào đây - tôi thậm chí có thể dán nó vào GitHub (dĩ nhiên là có tín dụng)!
babelmonk

Có một điều kiện cuộc đua ở đây: khi bạn kết nối với WiFi, bạn có một cửa sổ hai phút trong đó TM có thể bắt đầu trước khi tập lệnh thông báo và tắt nó đi.
Reid

1
Thay vì kích hoạt điều này cứ sau 2 phút, bạn có thể kích hoạt nó bất cứ khi nào có sự thay đổi trong cấu hình mạng. Bạn chỉ cần sử dụng launchdvà bảo nó tìm bất kỳ thay đổi nào đối với /Library/Preferences/SystemConfiguration/thư mục. Tôi có một ví dụ về điều này có sẵn tại github.com/tjluoma/onnetworkchange .
TJ Luoma

6

AppleScript này sẽ kiểm tra xem kết nối Ethernet có hoạt động không, và sau đó chạy bản sao lưu Time Machine nếu có.

Đầu tiên, vô hiệu hóa Time Machine trong System Preferences. Phương pháp dưới đây sẽ chạy nó tự động.

Trong khi kết nối với Ethernet , bạn sẽ cần chạy một lệnh thủ công để xác nhận Ethernet giao diện nào được gán cho. Chạy lệnh này:

ifconfig

Nó sẽ xuất ra một màn hình đầy đủ thông tin. Những gì bạn đang tìm kiếm là một phần được gắn nhãn envới một số sau nó, và dòng cuối cùng của nó là status: activenhư thế này:

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

Lưu ý số bên cạnh enlúc đầu - đây là giao diện mà kết nối Ethernet của bạn đang chạy. Trong đoạn script bên dưới, nơi nó nói en9, thay thế 9bằng số từ phía trên. (Nếu bạn có Mac Pro, rất có thể nó sẽ en0hoặc en1. Nếu không, nó sẽ có khả năng 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

Lưu cái này EthernetTimeMachine.scptvào thư mục nhà của bạn ( /Users/<yourusername>/).

Tiếp theo mở Terminal và gõ lệnh sau:

pico ~/crontab

Điều này sẽ mở ra một trình soạn thảo văn bản để cho phép bạn lên lịch cho tập lệnh này chạy trên cơ sở hàng giờ, giống như Time Machine làm theo mặc định. Dán dòng này:

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

Nhấn control+ Xsau đó nhập yvà nhấn returnđể lưu và thoát.

Để tắt nó, quay trở lại Terminal, sử dụng lại lệnh:

pico ~/crontab

Sau đó xóa dòng bạn đã thêm ở trên và sử dụng các bước tương tự để lưu và thoát.


Ah - điều này thật tuyệt - cảm ơn rất nhiều! Một câu hỏi - tôi có cần tắt máy thời gian không? Hoặc đã kích hoạt nó? Chắc chắn nếu nó được kích hoạt, nó vẫn sẽ chạy theo lịch trình riêng của nó?
babelmonk

Một suy nghĩ về các dòng tương tự (xin lỗi cho bài đăng đôi) - bạn có thể không chạy một cái gì đó như thế này không: lwgat.blogspot.co.uk/2013/02/ trên để bật / tắt máy thời gian và chạy cái này thay vì @hourly nhưng trên mạng thay đổi sự kiện?
babelmonk

Bạn sẽ muốn tắt Time Machine trong cài đặt của nó trước khi thực hiện việc này. Theo như sử dụng một sự kiện thay đổi mạng và / hoặc bật / tắt Time Machine, điều đó chắc chắn là có thể thực hiện được. Tôi sẽ xem xét tối nay và ném một cái gì đó với nhau trong một câu trả lời khác.
tubedogg

Một nhược điểm để phát hiện thay đổi mạng là bạn phải có một cái gì đó liên tục chạy trong nền để phát hiện nó.
tubedogg

-1

Bạn có thể mở Prefs mạng và đảm bảo Ethernet là kết nối hàng đầu trong thứ tự dịch vụ. Bạn có thể thấy những gì tôi muốn nói trong ảnh chụp màn hình này, tôi hy vọng.

Sau đó, nếu Ethernet được kết nối, bạn phải luôn sử dụng nó làm kết nối chính.

Xem tại đây để biết cách đặt mức độ ưu tiên của dịch vụ: http://osxdaily.com/2013/06/15/set-network-connection-p Warriority-mac-os-x /


Cảm ơn, tôi hiểu mảnh đó. Vấn đề là tôi rõ ràng cần phải vô hiệu hóa sao lưu khi ethernet không được kết nối. Tôi đoán tôi có thể viết một AppleScript để en / vô hiệu hóa nó (một cái gì đó như thế này: hints.macworld.com/article.php?story=20040222210724156 grepping từ ifconfig en0) ...
babelmonk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.