Скрипти перезавантаження модему, скрипти, iонлайн

Не так давно я поставив собі за мету трохи полегшити свою роботу. Вся справа в тому, що я адміністратор однієї з мінських домашніх мереж. Робота цікава, творча, але рутини вистачає. Є сервера, тому хочеться автоматизму.

Коли модеми довго працюють, вони починають гальмувати або втрачати зв'язок. У кого вдома стоїть ADSL - модему або хто коли-небудь дзвонив на технічну підтримку інтернет провайдера пам'ятає, що перший варіант вирішення проблеми: перезавантажте модем. Так, буває це не так часто, але все ж. А якщо ти не вдома, то що робити? Та й чому б в якості перестраховки не зробити так, щоб можемо перезавантажувалися автоматично? Сказано зроблено. Порившись в інтернеті я не знайшов нічого путнього під лінукс. Були спроби написати якісь скрипти під Вінду. Але мені це не підходило.

Трохи засмутившись, я вирішив звернутися за помошью до братів линуксоидов. Природно, скрипти мені ніхто не написав, але ось наштовхнули на рішення проблеми, підкинувши посилання:

Покопавши в цьому напрямку, я зрозумів, що саме цей скриптовой мову і допоможе мені вирішити проблему. Іншому розв'язати цю проблему універсально, написати скрипти для кожної моделі модему з мінімальними измененями. Як я зрозумів скриптовой мову Expect дозволяє парсити виведену інформацію і після певних фраз вводити ті чи інші значення. Це стало дуже важливим, тому що в модемах Zyxel працює спеціальна оболонка і до командного рядка ще дістатися треба, це вам не D-Link де все просто: ввів команду і отримай відразу результат.

Перед тим як запускати наведені скрипти необхідно встановити відповідний пакет, для того щоб Linux розумів даний скриптовой мову. Оскільки я є фанатом Linux Debian, то команда установки виглядає наступним чином:


Розробка алгоритму для перезавантаження модемаD-Link DSL-2540U

Що ми робимо для того, щоб перезавантажити модем через telnet? Ми вводимо відповідні команди в терміналі і модем їх виконує. Для перезавантаження модему D-Link ми використовуємо наступні команди:

  1. Підключаємося до модему командою telnet ip-модему
  2. Ім'я користувача (модем може запитувати, а може і не запитувати.
  3. Вводимо пароль.
  4. Вводимо команду reboot і чекаємо поки перезавантажиться модем
  5. Виходимо з консолі, часто просто закривши її, тому що вона підвисає після розриву з'єднання пов'язаного з перезавантаженням.

Скрипт перезавантаження модему D-Link DSL-2540U

Тепер розберемося в командах. (Для непосвячених)

#! / Usr / bin / expect -f -діректіва компілятору щоб він знав який скриптовой мову ми використовуємо.

Наступним кроком можна форматувати змінні. Але я не думаю, що це варто робити, адже ми пишемо зовсім маленький скрипт і само собою перевантажувати його ще й марними змінними (змінні в даному випадку марні оскільки ми не проводимо з ними ніяких логічних операцій, а значення присвоєні змінним в процесі роботи скрипта використовуються всього 1 раз, так що сенсу в цьому немає). Як то кажуть, стислість сестра таланту.

Тепер перейдемо до командам виконуваних скриптом. Вся простота і перелесть полягає в тому, що ми не прідумаваем нічого нового, просто використовуємо знайомі нам команди.

Для простоти сприйняття хочу відзначити, що

expect - Команда, яка парсит текст, виведений в термінал пристроєм і іщел відповідне слово або форазу вказане після нього в лапках »«. Правильно введена фраза - гарантія того, що скрипт відпрацює правильно і не звалиться в помилку.

expect «Login:» - дана команда означає, що після словаLogin: скрипт становит курсор і буде готовий ввести наступну команду. Не забуваємо, що Linux розрізняє верхній і нижній регістр написання, тому всі тексти, які повинен шукати скрипт повинні бути написані саме так, як вони відображаються в терміналі. З усіма знаками і символами.

send - команда відправки. Вставляє в рядок значення, необхідні нам, грубо кажучи вводить команди замість нас, які вказані в "". Не забуваємо, що, якщо після введеної команди нам потрібно натиснути клавішу ENTER для виплолненія, то в лапках потрібно ввести наступне поєднання символів без пробілу після потрібної команди або, наприклад логіна, \ r

send «admin \ r» - передаємо модему ім'я користувача. Вам потрібно зауважити ім'я користувача на те, яке запрограмовано у Вашому модее. Дізнатися це не складно з керівництва по експлуатації модему. Воно таке ж як і для входу через WEB-інтерфейс.

expect «Password:» - чекаємо поки модем запросить пароль.

send «my_password \ r» - відправляємо модему пароль яким він захищений. Не варто забувати пароль. Замініть фразу my_password на ваш пароль. Не забуваємо, що відразу після пароля має бути написано ось це \ r »Між параметром і командою використання пробілу неприпустимо!

Тепер транслюємо модему потрібні команди і насолоджуємося результатом.

expect «>» - шукаємо рядок введення команди. звертаю Вашу увагу, в різних модемів вона виглядає по різному. А лапках рекомендую вписати текст рядка, який стоїть на початку рядка введення команди.

send «reboot \ r» - передаємо модему команду для перезавантаження.

send «exit \ r» - передаємо модему команду завершення соедніенія. Завершуємо telnet-сесію.

expect eof - дана команда використовується для завершення роботи скрипта.

Ось власне, і Весь скрипт. Тепер його можна сміливо заливати на сервер і виконувати. Як саме його запускати, вирішувати Вам. Я його запускаю по крону щодня вночі. Щоб розрив зв'язку не заважав. Я в цей час вже сплю