Автоматически запускаемые сценарии
From DD-WRT Wiki
English • Deutsch • Español • Français • Italiano • 日本語 • Polski • Português • Русский • Svenska • 中文(中国大陆) • 中文(台灣) • |
Contents |
[edit] Введение
Иногда требуется, чтобы какие-либо команды выполнялись при каждом запуске маршрутизатора. В это случае требуется написание автоматически запускаемых сценариев.
Далее представлены несколько способов заставить DD-WRT автоматически запускать сценарии командной строки при запуске маршрутизатора.
Кроме указанных в этой статье существует еще один способ - поместить сценарии в специальную папку с расширением .startup. См. Запуск сценариев по событию.
[edit] Способ 1. Веб-интерфейс
[edit] Предварительные требования
- Умение использовать веб-интерфейс DD-WRT.
- Определить последовательность команд, которые должны выполняться при каждом запуске маршрутизатора.
- Предварительно проверить правильную работу команд в командной строке (необязательно).
[edit] Инструкция
- В веб-интерфейсе перейдите на вкладку Administration → Command (или Administration → Diagnostics в старых версиях DD-WRT).
- Введите команды, которые требуется выполнять при каждом запуске маршрутизатора, в текстовом поле Commands:. Поместите каждую команду в отдельной строке, используя клавишу Enter. Если введенная команда выполняется продолжительное время и не завершается через мгновение, введите символ «&» после команды, чтобы система не ожидала пока команда завершится и продолжила запуск маршрутизатора, выполняя команду в фоновом режиме.
- Нажмите кнопку Save Startup в нижней части страницы, чтобы сохранить команды в переменной rc_startup. Нажатие кнопки Save Firewall сохранит команды в переменную rc_firewall.
[edit] Как это работает
Это позволяет сохранить введенный список команд в переменной rc_startup во флэш-памяти (такие переменные также называются «переменная NVRAM»). Так как флэш-память не стирается при перезапуске маршрутизатора, введенный сценарий останется и будет выполняться при каждом запуске маршрутизатора.
[edit] Сценарии Custom Script
- Если внизу страницы раздела Administration → Command есть кнопка Save Custom Script, можно сохранить команды, введенные в текстовое поле «Commands» в файл `/tmp/custom.sh`.
- Этот пользовательский сценарий затем можно выполнить, набрав `sh /tmp/custom.sh` (без кавычек) в поле «Commands» и нажав кнопку «Run Commands» в нижней части страницы. Команда с символом «&» в конце будет выполняться в фоновом режиме: `sh /tmp/custom.sh &`.
[edit] Способ 2. NVRAM
[edit] Предварительные требования
- Умение использовать интерфейс командной строки маршрутизатора, подключившись по Telnet или SSH.
- Определить последовательность команд, которые должны выполняться при каждом запуске маршрутизатора.
- Предварительно проверить правильную работу команд в командной строке (необязательно).
[edit] Инструкция
- Подключитесь к интерфейсу командной строки маршрутизатора, используя Telnet или SSH.
- Чтобы задать команды, которые будут выполняться при запуске маршрутизатора, используйте следующую команду:
nvram set rc_startup=" <команда 1> <команда 2> ... <команда n> "
При выполнении команды nvram commit, переменная rc_startup сохраняется во флэш-памяти.
nvram commit
Хорошим приемом для ввода длинного списка команд, которые, например, были загружены из Интернета, является функция вставки утилиты Telnet из операционной системы Windows.
В командной строке утилиты Telnet введите:
nvram set rc_startup="
Когда появится приглашение >, скопируйте текст из блокнота или браузера, щелкните правой кнопкой мыши значок Telnet в верхней части окна и выберите «Правка → Вставить». Вуаля! Весь сценарий в окне, каждая команда аккуратно размещена в отдельной строке. Теперь введите завершающий символ " и нажмите Enter для сохранения.
[edit] Как это работает
После ввода первой команды вы заметите, что приглашение изменилось на >. Далее в каждой строке добавляются новые команды в переменную rc_startup. Технически вы все еще набираете одну большую команду, даже если используете несколько строк. При вводе завершающего символа " и нажатии Enter, вы увидите, что приглашение изменилось, и первая команда выполнена. Сценарий был добавлен в переменную rc_startup.
На этом этапе можно проверить содержимое переменной rc_startup, выполнив команду:
~ # nvram get rc_startup
[edit] Совет: автоматизация веб-интерфейса
Для автоматизации или тестирования веб-интерфейса можно использовать бесплатное дополнение iMacros для браузера Firefox. С его помощью можно записывать и воспроизводить определенные действия в интерфейсе браузера. Скачать его можно по адресу https://addons.mozilla.org/ru/firefox/addon/imacros-for-firefox/
[edit] Способ 3. Сценарии оболочки
Можно создать сценарий оболочки, который будет вызывать другие сценарии.
Ввод прямо в переменную NVRAM подходит для небольшого количества команд, но если нужно выполнять много команд и легко управлять запускаемыми сценариями, лучший способ - использовать сценарии оболочки.
Сценарии оболочки упрощают написание длинного списка команд, которые запускают исполняемые файлы, выполняют загрузку из Интернета (wget), устанавливают пакеты ipkg -d ram install, копируют предварительно созданные файлы конфигурации из раздела флэш-памяти и т.д., прежде чем запустить нужную программу и делают так при каждом запуске.
Это означает, что не обязательно экономить место во флэш-памяти маршрутизатора (NVRAM, которой довольно мало), вместо этого можно заполнить более ёмкую оперативную память без необходимости вручную переустанавливать и настраивать программу(ы) после каждой перезагрузки маршрутизатора.
И, поскольку у каждой программы будет свой собственный сценарий, удаление программы из следующего запуска маршрутизатора так же просто, как удаление, перемещение или переименование файла запускаемого скрипта.
[edit] Предварительные требования
- Умение использовать интерфейс командной строки маршрутизатора, подключившись по Telnet или SSH.
- Определить последовательность команд, которые должны выполняться при каждом запуске маршрутизатора.
- Умение копировать файлы на маршрутизатор и с него, используя SCP, WinSCP или другим способом.
- Файловая система JFFS включена и работает должным образом.
- Текстовый редактор, подходящий для редактирования файлов систем *nix (только для Windows): TextPad, Win32Pad, Notepad++ или другой. Стандартный Блокнот не подойдет.
- Предварительно проверить правильную работу команд в командной строке (необязательно).
[edit] Инструкция
[edit] Написать сценарий оболочки
Напишите сценарий оболочки для каждой программы, которую хотели бы запустить при запуске маршрутизатора. Скрипт должен быть файлом * .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
[edit] Сохранить сценарий
Включите JFFS, чтобы получить пространство для хранения файлов. Сохраните скрипт на маршрутизаторе в каталоге /jffs/etc/config. Может понадобиться создать этот каталог. Сделайте это либо в WinSCP, либо в оболочке (SSH или Telnet) с помощью команды mkdir.
[edit] Сделать сценарий исполняемым
Сделать сценарий исполняемым означает измененить права доступа файла на «700». Сделайте это через WinSCP или с помощью команды:
~ # chmod 700 /jffs/etc/config/<scriptname>.startup
[edit] Назначить запуск сценария
Подробнее об этом см. статью Запуск сценариев по событию.
[edit] Способ 4. Клиент Samba
Недостаток JFFS заключается в том, что она не работает на некоторых версиях прошивки и предоставляет мало пространства для хранения файлов. Если у вас есть сервер Samba или Windows Server, работающий в локальной сети, можно использовать невероятную опцию 'sambashare'. Это добавит маршрутизатору огромное количество доступного для записи пространства для хранения и можно будет задать сценарий, который будет автоматически запускаться, когда общий ресурс Samba монтируется при загрузке. Параметры общих ресурсов Samba можно найти в разделе Administration веб-интерфейса. Если параметр Startup script (см. Запуск сценариев по событию) задать в значение startup.sh, каждый раз после подключения (монтирования) общего ресурса будет запускаться сценарий /tmp/smbshare/startup.sh.
Смотрите статью Сетевая файловая система Samba для подробной информации.