Перезагружаем mgcamd на dreambox 500s при выходе из режима StandBy

Написать данный скрипт меня побудил одно обстоятельство. Поставил я одному знакомому dreambox 500s. Знакомый хороший, но с техникой на вы. Однажды звонит мне и жалуется на неработающий ресивер. Я приезжаю к ему. Нажимаю синюю кнопку. Жму restart Auto-Cam. Все работает. Я в душе проматерился и поехал домой писать данный скрипт.
Первым делом выяснил какие скрипты запускаются при нажатии на кнопку 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:$PASS@127.0.0.1/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.

ЗЫ: Тем кому в лом писать все это в ручную — качаем готовый скрипт restartemu.tar.gz

ЗЗЫ: Пробовал на имиджах Nabilo и Gemini

Добавить комментарий

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.