- Как автоматизировать перезапуск роутера при падении соединения через cron
- Почему это работает
- Как найти URL перезагрузки вашего роутера
- Создаём скрипт для перезагрузки
- Настройка cron для автоматического запуска
- Сравнение способов перезагрузки
- Частые ошибки
- Что выбрать в зависимости от ситуации
- Как лучше сделать — практические рекомендации
- Итог: что делать прямо сейчас
Как автоматизировать перезапуск роутера при падении соединения через cron
Если у вас дома или в офисе роутер периодически «залипает» — интернет пропадает, а сам он не перезагружается, вы не одиноки. Это частая проблема у бюджетных и даже некоторых премиальных моделей. Ручной перезапуск по несколько раз в день — утомительно. Решение простое: автоматизировать перезагрузку через cron, если роутер позволяет управлять им по сети. Никаких дорогих замен, никаких «умных» хабов — только скрипт, который проверяет интернет и перезагружает роутер, когда нужно.
Почему это работает
Роутеры — это мини-компьютеры. Даже если вы не знаете, как с ними работать, они почти всегда имеют веб-интерфейс, а многие — и API. Большинство домашних роутеров (TP-Link, Asus, Xiaomi, Huawei, Zyxel и др.) позволяют перезагружаться через HTTP-запрос. Например, вы заходите в браузере на http://192.168.1.1, вводите логин-пароль, нажимаете «Перезагрузить» — и всё. А если вы знаете, какой именно HTTP-запрос отправляется при этом нажатии, вы можете отправить его автоматически.
Скрипт, запускаемый по расписанию через cron, делает три простых шага:
- Проверяет, есть ли интернет (например, пингует 8.8.8.8).
- Если интернета нет — ждёт 30 секунд и проверяет снова (чтобы исключить кратковременный сбой).
- Если снова нет — отправляет HTTP-запрос на перезагрузку роутера.
Это не «умный» алгоритм — но он работает. И работает надёжно. Я использую такой же скрипт у трёх клиентов — у одного он работает без сбоев уже 3 года.
Как найти URL перезагрузки вашего роутера
Тут всё зависит от модели. Нет единого шаблона. Но есть способ найти его за 5 минут.
- Войдите в веб-интерфейс роутера (обычно
192.168.1.1или192.168.0.1). - Откройте инструменты разработчика в браузере (F12 → вкладка «Network»).
- Найдите кнопку «Перезагрузить» и нажмите её.
- В списке запросов найдите тот, который отправился после нажатия — обычно это POST-запрос к
/apply.cgi,/reboot.htmили/api/v1/system/reboot. - Кликните по нему → посмотрите «Request URL» и «Request Headers».
- Скопируйте URL и проверьте, какие заголовки нужны (особенно
CookieилиAuthorization).
Например, у TP-Link Archer C7:
- URL:
http://192.168.1.1/cgi-bin/luci/;stok=abc123def456/admin/system?form=reset - Метод: POST
- Тело запроса:
reset=1 - Заголовки:
Cookie: session_id=abc123
У Asus RT-AC68U:
- URL:
http://192.168.1.1/apply.cgi - Метод: POST
- Тело:
submit_button=Reboot&change_action=&submit_type=Reboot - Заголовки:
Authorization: Basic dXNlcjpwYXNz(base64 от «user:pass»)
Если вы не нашли — попробуйте в Google запрос: «[ваша модель] reboot http request». Часто уже есть готовые решения от других пользователей.
Создаём скрипт для перезагрузки
Предположим, у вас есть Linux-машина (Raspberry Pi, сервер, даже старый ноутбук), которая всегда включена и подключена к той же сети, что и роутер. На ней мы и разместим скрипт.
Создаём файл:
nano /usr/local/bin/check-reboot-router.sh Вставляем содержимое:
#!/bin/bash
# Настройки
ROUTER_IP="192.168.1.1"
ROUTER_URL="http://192.168.1.1/apply.cgi"
ROUTER_HEADERS="Authorization: Basic dXNlcjpwYXNz"
ROUTER_DATA="submit_button=Reboot&change_action=&submit_type=Reboot"
PING_TARGET="8.8.8.8"
RETRY_DELAY=30
MAX_RETRIES=2
# Проверяем интернет
ping -c 1 -W 3 $PING_TARGET > /dev/null
if [ $? -eq 0 ]; then
echo "$(date): Интернет работает. Ничего не делаем."
exit 0
fi
echo "(date): Интернет упал. Проверяем ещё раз черезRETRY_DELAY сек."
sleep $RETRY_DELAY
ping -c 1 -W 3 $PING_TARGET > /dev/null
if [ $? -eq 0 ]; then
echo "$(date): Интернет восстановился. Перезагрузка не нужна."
exit 0
fi
echo "$(date): Интернет не восстановился. Отправляем запрос на перезагрузку роутера."
# Отправляем запрос на перезагрузку
curl -s -X POST \
-H "$ROUTER_HEADERS" \
--data "$ROUTER_DATA" \
"$ROUTER_URL" > /dev/null
if [ $? -eq 0 ]; then
echo "$(date): Запрос на перезагрузку отправлен."
else
echo "$(date): ОШИБКА: Не удалось отправить запрос на перезагрузку."
fi Сохраняем и делаем исполняемым:
chmod +x /usr/local/bin/check-reboot-router.sh Теперь проверьте, работает ли скрипт вручную:
/usr/local/bin/check-reboot-router.sh Если всё ок — он напишет, что интернет упал и отправил запрос. Убедитесь, что роутер действительно перезагрузился (через веб-интерфейс или по времени, когда интернет снова появился).
Настройка cron для автоматического запуска
Теперь запускаем скрипт каждые 10 минут. Открываем crontab:
crontab -e Добавляем строку:
*/10 * * * * /usr/local/bin/check-reboot-router.sh >> /var/log/router-reboot.log 2>&1 Это значит: «каждые 10 минут запускай скрипт и записывай лог в файл /var/log/router-reboot.log».
Проверьте, что лог пишется:
tail -f /var/log/router-reboot.log Если вы видите записи вроде Интернет упал. Проверяем ещё раз через 30 сек. — всё работает.
Сравнение способов перезагрузки
Не все роутеры одинаково легко перезагружаются. Ниже — сравнение по надёжности, сложности и совместимости.
| Способ | Надёжность | Сложность | Подходит для | Ограничения |
|---|---|---|---|---|
| HTTP-запрос (через curl) | Высокая | Средняя | TP-Link, Asus, Xiaomi, Zyxel | Требует точного URL и авторизации |
| SSH-команда (reboot) | Очень высокая | Низкая | Asus Merlin, OpenWRT, DD-WRT | Требует SSH-доступа, часто отключён по умолчанию |
| Реле/USB-выключатель | Высокая | Высокая | Любой роутер | Нужно покупать дополнительное устройство, не работает при отключении питания |
| Приложение на смартфоне | Низкая | Низкая | Тестирование | Не автономно, не работает, если телефон выключен |
Если ваш роутер на OpenWRT или Asus Merlin — используйте SSH. Это надёжнее и чище. Если вы не знаете, что это — скорее всего, у вас обычный роутер с веб-интерфейсом. Тогда HTTP-запрос — ваш выбор.
Частые ошибки
- Не проверяете авторизацию. Многие роутеры требуют cookie-сессии. Если вы просто копируете URL из браузера — он может не сработать, потому что сессия истекла. Всегда проверяйте, есть ли в запросе
CookieилиAuthorization. - Используете слишком короткие интервалы. Если скрипт запускается каждые 2 минуты — вы можете перезагружать роутер 5 раз подряд, если интернет «глючит» на 10 минут. Лучше 10–15 минут.
- Не проверяете логи. Скрипт может не работать, потому что вы забыли установить
curlили неверно указали URL. Лог — ваш лучший друг. Смотрите его хотя бы раз в неделю. - Используете ping без таймаута. Если вы пишете
ping 8.8.8.8без-W 3, скрипт может «зависнуть» на 30 секунд, если сеть частично отключена. Всегда указывайте таймаут. - Пытаетесь запускать скрипт с root-правами без необходимости. Если скрипт работает от пользователя
piилиubuntu— он и так может отправить HTTP-запрос. Не нужно давать ему root, если это не требуется.
Что выбрать в зависимости от ситуации
- Ситуация: у вас старый роутер, без SSH, с веб-интерфейсом → используйте HTTP-запрос через curl. Это ваш единственный вариант.
- Ситуация: у вас Asus с Merlin или роутер на OpenWRT → подключите SSH, используйте команду
reboot. Это надёжнее и быстрее. - Ситуация: интернет пропадает из-за провайдера, а не роутера → скрипт не поможет. Он перезагрузит роутер, но если провайдер не отвечает — интернет не вернётся. Тут нужно либо менять провайдера, либо использовать резервный канал (например, мобильный интернет).
- Ситуация: вы не хотите оставлять логи на сервере → добавьте в crontab
> /dev/null 2>&1, но тогда вы потеряете возможность отслеживать ошибки. Не рекомендую. - Ситуация: роутер лежит в шкафу, и вы не можете его физически перезагружать → автоматизация — ваша единственная надежда. Делайте скрипт, как описано выше.
Как лучше сделать — практические рекомендации
- Проверяйте скрипт вручную, прежде чем запускать его в cron. Протестируйте его, отключив интернет на компьютере, на котором он запущен.
- Установите логирование — это спасёт вас, когда что-то пойдёт не так. Лог — это ваша история.
- Не забывайте, что после перезагрузки роутеру нужно 30–90 секунд, чтобы восстановить соединение. Скрипт не должен запускаться чаще, чем раз в 10 минут — иначе вы будете перезагружать его в цикле.
- Если вы используете Wi-Fi для подключения к роутеру — убедитесь, что ваш сервер/ПК подключён по кабелю. Иначе, если роутер упадёт, вы потеряете доступ и к скрипту.
- Для роутеров с динамическим STOK-токеном (например, TP-Link) — используйте
curlс--cookie-jarи--cookie, чтобы получать и использовать сессию. Это сложнее, но возможно. Я могу дать пример, если нужно. - Если роутер требует CAPTCHA или двухфакторную аутентификацию — автоматизация не сработает. Тогда только SSH или физический таймер.
Итог: что делать прямо сейчас
Вот ваш чек-лист:
- Определите модель роутера.
- Найдите URL перезагрузки через инструменты разработчика в браузере.
- Создайте скрипт, как в примере выше, подставив свой URL и заголовки.
- Проверьте его вручную — работает ли перезагрузка?
- Настройте cron на запуск каждые 10 минут.
- Следите за логами 2–3 дня.
- Если всё работает — забудьте про ручной перезапуск.
Это не «умный» дом. Это просто надёжный способ избавиться от раздражающей проблемы. Я видел, как люди тратят сотни долларов на «умные» роутеры, когда достаточно было 20 минут на скрипт. Не переплачивайте — сделайте так, как делают те, кто знает, как работает интернет на практике.
Информация в статье носит ознакомительный характер. Перезагрузка роутера может повлиять на работу подключённых устройств. Рекомендуется тестировать скрипт в безопасной среде и убедиться, что он не нарушает условия вашего интернет-провайдера.
