Автоматическая перезагрузка роутера D-Link DIR-300

Потребовалось перезагружать роутер D-Link DIR-300 каждое утро в 8:00 автоматически. Раньше это делали в ручную, однако мне пришла идея автоматизировать этот процесс. Я полагаю что данная статья подойдет не только для роутера данной модели, однако возможно придется скорректировать скрипт под особенности других моделей.

С этой задачей я решил разобраться с помощью знакомой мне утилиты Expect. Она уже ни раз меня выручала в случаях необходимости автоматизировать какие либо задачи на устройствах управляемых telnet или tftp.

Для начала установим expetc:

apt-get install expect

Ниже приведен скрипт, который телнетится на роутер, вводит логин и пароль, а после этого совершает перезагрузку роутера командой reboot.

#!/bin/bash
(/usr/bin/expect -c "
spawn telnet 192.168.0.1
expect \"Dlink-Router login:\"
send \"admin\r\"
sleep 5
expect \"Password:\"
send \"GjgfDGbdt\r\"
sleep 5
expect \"\"
send \"reboot\r\"
sleep 5
interact
exit
")

При написания данного небольшого скрипта возникла сложность с тем, что когда его запускаешь в ручную, то всё срабатывает без проблем, а если же через крон, то скрпт подвисал на запросе пароля. Данная проблема решилась добавления слипов (ожидания) в течении 5 секунд (sleep 5).

ПОЛЕЗНО  «Яндекс» запустил API «Яндекс.Погоды» для владельцев сайтов

Далее добавляем запуск скрипта в крон «crontab -e».

0 8 * * * /bin/bash /root/reboot_router.sh > /root/log.log

Для отладки отправляю поток вывода в файл /root/log.log

Вот и всё, на утро проверяем перезагрузился роутер или нет.

Замечу что утилита Expect существует так же и для Windows, поэтому не составит никакого труда реализовать тоже самое под виндой.

источник