Потребовалось перезагружать роутер 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).
Далее добавляем запуск скрипта в крон «crontab -e».
0 8 * * * /bin/bash /root/reboot_router.sh > /root/log.log
Для отладки отправляю поток вывода в файл /root/log.log
Вот и всё, на утро проверяем перезагрузился роутер или нет.
Замечу что утилита Expect существует так же и для Windows, поэтому не составит никакого труда реализовать тоже самое под виндой.