Автоматически запускаемые сценарии

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search

Atatob (Talk | contribs)
(Перевод)
Next diff →

Revision as of 05:31, 24 December 2019

Contents

Введение

Иногда требуется, чтобы какие-либо команды выполнялись при каждом запуске маршрутизатора. В это случае требуется написание автоматически запускаемых сценариев.

Далее представлены несколько способов заставить DD-WRT автоматически запускать сценарии командной строки при запуске маршрутизатора.

Кроме указанных в этой статье существует еще один способ - поместить сценарии в специальную папку с расширением .startup. См. Script Execution.

Способ 1. Веб-интерфейс

Предварительные требования

  • Умение использовать веб-интерфейс DD-WRT.
  • Определить последовательность команд, которые должны выполняться при каждом запуске маршрутизатора.
  • Предварительно проверить правильную работу команд в командной строке (необязательно).

Инструкция

  1. В веб-интерфейсе перейдите на вкладку Administration → Command (или Administration → Diagnostics в старых версиях DD-WRT).
  2. Введите команды, которые требуется выполнять при каждом запуске маршрутизатора, в текстовом поле Commands:. Поместите каждую команду в отдельной строке, используя клавишу Enter. Если введенная команда выполняется продолжительное время и не завершается через мгновение, введите символ «&» после команды, чтобы система не ожидала пока команда завершится и продолжила запуск маршрутизатора, выполняя команду в фоновом режиме.
  3. Нажмите кнопку Save Startup в нижней части страницы, чтобы сохранить команды в переменной rc_startup. Нажатие кнопки Save Firewall сохранит команды в переменную rc_firewall.

Как это работает

Это позволяет сохранить введенный список команд в переменной rc_startup во флэш-памяти (такие переменные также называются «переменная NVRAM»). Так как флэш-память не стирается при перезапуске маршрутизатора, введенный сценарий останется и будет выполняться при каждом запуске маршрутизатора.

Сценарии Custom Script

  • Если внизу страницы раздела Administration → Command есть кнопка Save Custom Script, можно сохранить команды, введенные в текстовое поле «Commands» в файл `/tmp/custom.sh`.
  • Этот пользовательский сценарий затем можно выполнить, набрав `sh /tmp/custom.sh` (без кавычек) в поле «Commands» и нажав кнопку «Run Commands» в нижней части страницы. Команда с символом «&» в конце будет выполняться в фоновом режиме: `sh /tmp/custom.sh &`.

Способ 2. NVRAM

Предварительные требования

  • Умение использовать интерфейс командной строки маршрутизатора, подключившись по Telnet или SSH.
  • Определить последовательность команд, которые должны выполняться при каждом запуске маршрутизатора.
  • Предварительно проверить правильную работу команд в командной строке (необязательно).

Инструкция

  1. Подключитесь к интерфейсу командной строки маршрутизатора, используя Telnet или SSH.
  2. Чтобы задать команды, которые будут выполняться при запуске маршрутизатора, используйте следующую команду:
 nvram set rc_startup="
 <команда 1>
 <команда 2>
 ...
 <команда n>
 "

При выполнении команды nvram commit, переменная rc_startup сохраняется во флэш-памяти.

 nvram commit

Хорошим приемом для ввода длинного списка команд, которые, например, были загружены из Интернета, является функция вставки утилиты Telnet из операционной системы Windows.

В командной строке утилиты Telnet введите:

nvram set rc_startup="

Когда появится приглашение >, скопируйте текст из блокнота или браузера, щелкните правой кнопкой мыши значок Telnet в верхней части окна и выберите «Правка → Вставить». Вуаля! Весь сценарий в окне, каждая команда аккуратно размещена в отдельной строке. Теперь введите завершающий символ " и нажмите Enter для сохранения.

Как это работает

После ввода первой команды вы заметите, что приглашение изменилось на >. Далее в каждой строке добавляются новые команды в переменную rc_startup. Технически вы все еще набираете одну большую команду, даже если используете несколько строк. При вводе завершающего символа " и нажатии Enter, вы увидите, что приглашение изменилось, и первая команда выполнена. Сценарий был добавлен в переменную rc_startup.

На этом этапе можно проверить содержимое переменной rc_startup, выполнив команду:

~ # nvram get rc_startup

Совет: автоматизация веб-интерфейса

Для автоматизации или тестирования веб-интерфейса можно использовать бесплатное дополнение iMacros для браузера Firefox. С его помощью можно записывать и воспроизводить определенные действия в интерфейсе браузера. Скачать его можно по адресу https://addons.mozilla.org/ru/firefox/addon/imacros-for-firefox/

Способ 3. Сценарии оболочки

Можно создать сценарий оболочки, который будет вызывать другие сценарии.

Ввод прямо в переменную NVRAM подходит для небольшого количества команд, но если нужно выполнять много команд и легко управлять запускаемыми сценариями, лучший способ - использовать сценарии оболочки.

Сценарии оболочки упрощают написание длинного списка команд, которые запускают исполняемые файлы, выполняют загрузку из Интернета (wget), устанавливают пакеты ipkg -d ram install, копируют предварительно созданные файлы конфигурации из раздела флэш-памяти и т.д., прежде чем запустить нужную программу и делают так при каждом запуске.

Это означает, что не обязательно экономить место во флэш-памяти маршрутизатора (NVRAM, которой довольно мало), вместо этого можно заполнить более ёмкую оперативную память без необходимости вручную переустанавливать и настраивать программу(ы) после каждой перезагрузки маршрутизатора.

И, поскольку у каждой программы будет свой собственный сценарий, удаление программы из следующего запуска маршрутизатора так же просто, как удаление, перемещение или переименование файла запускаемого скрипта.

Предварительные требования

  • Умение использовать интерфейс командной строки маршрутизатора, подключившись по Telnet или SSH.
  • Определить последовательность команд, которые должны выполняться при каждом запуске маршрутизатора.
  • Умение копировать файлы на маршрутизатор и с него, используя SCP, WinSCP или другим способом.
  • Файловая система JFFS включена и работает должным образом.
  • Текстовый редактор, подходящий для редактирования файлов систем *nix (только для Windows): TextPad, Win32Pad, Notepad++ или другой. Стандартный Блокнот не подойдет.
  • Предварительно проверить правильную работу команд в командной строке (необязательно).

Инструкция

Написать сценарий оболочки

Напишите сценарий оболочки для каждой программы, которую хотели бы запустить при запуске маршрутизатора. Скрипт должен быть файлом * .startup.

Сценарии оболочки должны выглядеть так:

#!/bin/sh
<команда 1>
<команда 2>
<команда 3>
...
killall <имя процесса команды n>
<команда n>

Из-за особенностей системы DD-WRT написанный сценарий может запускаться периодически, а не только при запуске маршрутизатора (например, тема форума default/my.wanup is running like 20 times). Это означает, что если нужно убедиться, что только одна копия программы запускается одновременно, требуются дополнительные действия. В примере выше команда killall гарантирует, что <команда n> не будет запущена более одного раза одновременно. Предполагается, что все команды, которые появляются в сценарии до <команда n>, завершаются сразу после выполнения (например, cp, wget или iptables).

Пример сценария: kismet_server.startup

#!/bin/sh
# Создание каталога /tmp/usr/bin и переход в него
mkdir /tmp/usr
mkdir /tmp/usr/bin
cd /tmp/usr/bin

# Копирование исполняемого файла с домашнего веб-сервера
wget http://192.168.1.2/kismet_server

# Прервать все ранее запущенные экземпляры kismet_server
killall -q kismet_server

# Запустить kismet_server, используя конфигурационный файл /jffs/etc/kismet.conf
/tmp/usr/bin/kismet_server -n -f /jffs/etc/kismet.conf

Сохранить сценарий

Включите JFFS, чтобы получить пространство для хранения файлов. Сохраните скрипт на маршрутизаторе в каталоге /jffs/etc/config. Может понадобиться создать этот каталог. Сделайте это либо в WinSCP, либо в оболочке (SSH или Telnet) с помощью команды mkdir.

Сделать сценарий исполняемым

Сделать сценарий исполняемым означает измененить права доступа файла на «700». Сделайте это через WinSCP или с помощью команды:

~ # chmod 700 /jffs/etc/config/<scriptname>.startup

Назначить запуск сценария

Подробнее об этом см. статью Script Execution.

Способ 4. Клиент Samba

Недостаток JFFS заключается в том, что она не работает на некоторых версиях прошивки и предоставляет мало пространства для хранения файлов. Если у вас есть сервер Samba или Windows Server, работающий в локальной сети, можно использовать невероятную опцию 'sambashare'. Это добавит маршрутизатору огромное количество доступного для записи пространства для хранения и можно будет задать сценарий, который будет автоматически запускаться, когда общий ресурс Samba монтируется при загрузке. Параметры общих ресурсов Samba можно найти в разделе Administration веб-интерфейса. Если параметр Startup script (см. Script Execution) задать в значение startup.sh, каждый раз после подключения (монтирования) общего ресурса будет запускаться сценарий /tmp/smbshare/startup.sh.

Смотрите статью Сетевая файловая система Samba для подробной информации.

Ссылки