Первым делом выяснил какие скрипты запускаются при нажатии на кнопку StandBy. Вот эти красавцы enigma_enter_standby.sh и enigma_leave_standby.sh. Файл enigma_enter_standby.sh запускается когда вы выключаете ресивер. Соответственно enigma_leave_standby.sh при включении.
Чтобу перезагрузить эмулятор нужно сначала убить его killall -9 mgcamd, а затем заново запустить /var/bin/mgcamd &. Но проблема в том, что эмулятор может называться по разному: mgcamd, mgcamd1.35, mgcamd_1.35a и т.д. Есть пара способов как это выяснить. Заходим telnet-ом в ресивер. Пишем каманду ps -a. В открывшемся списке ищем чтото похожее на /var/bin/mgcamd1.35. /var/bin/ – путь до эмулятора mgcamd1.35 – файл эмулятора. Можно визуально через любой FTP клиент посмотреть какой эмулятор лежит в папке /var/bin/. После того как мы все узнали приступаем к созданию скрипта.
Пишем конфигурационный файл /var/script/restartemu.conf:
EMU_NAME=mgcamd_1.35 # Имя файла эмулятора EMU_DIR=/var/bin # Путь к файлу эмулятора SLEEP_TIME=1 # Пауза между убиством процесса и стартом MESSAGE=on # Выводить ли сообщение о перезагрузке эмулятора KILL_EMU=off #Когда убивать процесс. off – при выключении ресивера on – при включении LOGIN=root # Логин и пароль от dreambox PASS=dreambox # удаляем все логи из папки tmp remove_mgcamd_tmp(){ rm -rf /tmp/*mgcamd* }
Теперь пишем сами скрипты. Создаем в папке /var/script/ файл start_emu.sh со следующим содержанием
#!/bin/sh CONF=/var/script/restartemu.conf # проверяем существование конфигурационного файла и загружаем его if [ ! -f $CONF ]; then echo «ERROR: Config ‘$CONF’ not exists. Program aborted.» exit 1 fi . $CONF #проверяем существование файла эмулятора if [ -x $EMU_DIR/$EMU_NAME ]; then # Если переменная KILL_EMU стоит «on» то убиваем процесс эмулятора if [ $KILL_EMU = "on" ]; then killall -9 $EMU_NAME sleep 1 fi remove_mgcamd_tmp # удаляем логи sleep $SLEEP_TIME # делаем паузу перез запуском эмулятора $EMU_DIR/$EMU_NAME & # запускаем эмулятор # выводим сообщение if [ $MESSAGE = "on" ]; then wget -q -O – http://$LOGIN:[email protected]/cgi-bin/message?Restart%20$EMU_NAME fi else echo «ERROR: Emu ‘$EMU_DIR/$EMU_NAME’ not exists. Program aborted.» fi exit 1
Теперь пишем скрипт stop_emu.sh. И помещаем его в /var/script/
#!/bin/sh CONF=/var/script/restartemu.conf # проверяем существование конфигурационного файла и загружаем его if [ ! -f $CONF ]; then echo «ERROR: Config ‘$CONF’ not exists. Program aborted.» exit 1 fi . $CONF # Если переменная KILL_EMU стоит «off» то убиваем процесс эмулятора if [ $KILL_EMU = "off" ]; then killall -9 $EMU_NAME fi exit 1
Теперь запустим эти скрипты в нужный момент. Как я говорил выше нам нужны /var/etc/enigma_enter_standby.sh и /var/etc/enigma_leave_standby.sh.
enigma_enter_standby.sh
#!/bin/sh /var/script/stop_emu.sh & # запускаем файл stop_emu.sh при выключении ресивера
enigma_leave_standby.sh
#!/bin/sh /var/script/start_emu.sh & # запускаем файл start_emu.sh при включении ресивера
Осталось самая малость – назначить CHMOD-ы. Для файлов enigma_enter_standby.sh, enigma_leave_standby.sh, start_emu.sh, stop_emu.sh ставим 755. Файлу restartemu.conf ставим CHMOD 644.