Не знаю, кто виноват, мой Wi-Fi роутер или Mac OS X, но в домашней Wi-Fi сети у меня периодически пропадает коннект, хотя статус подключения не меняется. Но ничего не грузится и даже не пингуется. Если выключить Wi-Fi на Маке и тут же включить обратно, то всё конектится и работает нормально. До следующего такого провала.

Не найдя источника проблемы, решил написать AppleScript, который будет автоматически переподключать мне Wi-Fi.

Идея такова: постоянно пинговать ya.ru и в случае провала переподключать Wi-Fi.

Вот скрипт:

repeat
    
    try
        -- пингуем до первого успешного отклика с таймаутом в 1 секунду, чтобы не ждать бесконечно
        do shell script "ping -o -t1 ya.ru"
        --log "OK"
    on error
        -- в консоль пишем время разрыва и переподключаемся к сети
        log "[" & time string of (current date) & "] disconnected... AGAIN"
        do shell script "networksetup -setairportpower en0 off"
        do shell script "networksetup -setairportpower en0 on"
        -- у вас интерфейс может быть не en0
    end try

    -- прост небольшая пауза в 2 секунды
    delay 2
    
end repeat

У меня Wi-Fi интерфейс имеет нумерацию en0. У вас может быть другая, потому выполните команду networksetup -listnetworkserviceorder, чтобы это выяснить. Например, у меня вывод такой:

networksetup -listnetworkserviceorder

An asterisk (*) denotes that a network service is disabled.
(1) Wi-Fi
(Hardware Port: Wi-Fi, Device: en0)

(2) Bluetooth PAN
(Hardware Port: Bluetooth PAN, Device: en3)

(3) Thunderbolt Bridge
(Hardware Port: Thunderbolt Bridge, Device: bridge0)

Видно, что Wi-Fi интерфейс имеет обозначение en0.

Ну и всё, теперь, когда я нахожусь в “нестабильной” сети, я запускаю в терминале свой скрипт:

osascript ping-and-reconnect.scpt

И провалы коннекта остаются для меня незамеченными. Потом можно посмотреть вывод скрипта, где будет указано время для каждого “разрыва”.