cardshara-640x70

Shell-скрипт для перезапуска camd при зависании

Иногда случается что сет-топ-бокс не в состоянии считать смарт-карту и поэтому, кажется что эмулятор не работает. Есть несколько вещей, которые Вы должны понимать прежде чем приниматься за создание скрипта. Даже если Вы пишете свой сценарий в unix-совместимом тестовом редакторе, он может заставить bash (sh) выводить ошибки. В этом случае лучшее, что можно сделать, это преобразовать файл с помощью dos2unix в Вашем сет-топ-боксе. Как это сделать будет рассказано ниже.

Если эмулятор продолжает останавливаться без всякой видимой причины, то Вы (с помощью нашего скрипта) сможете проверить, остановилась ли программа, и если да - перезапустить ее через скрипт. У меня не сразу получилось потому то не прекращались ошибки, но потом я понял, что проблема была в том, что я писал код в редакторе для Windows, и в нем оказались скрытые коды пееновосв строк. Я прочитал пару уроков и узнал что переносы строк в файлах хоть и выглядят однинаково, но для Windows и Unix систем они на самом деле разные.

#!/bin/sh
camd="CCcam221"
echo "Cccam test started"
if [ $? ` ps -ef | grep $camd | grep -v grep` -eq 0 ]; then {
    echo "$camd is not running - restarting"
    cd /
    /bin/sh /usr/script/CCcam221.sh start <--- the sart command for my emu
} else {
    echo "$camd is already running"
}
fi

Теперь объясню что делает эта скромная программа.  Прежде всего

#!/bin/sh

говорит парсеру скрипта использовать командную строку (оболочку) sh из вашего дистрибутива Linux

camd="CCcam221"

это назначение величины переменной, которая позволит мне вводить название исполняемого файла (CCcam211) только однажды, и далее значение заменит каждое упоминание camd в скрипте на CCcam211.

if [ ! $? `ps -ef | grep $camd | grep -v grep` -eq 0 ]; then

Оператор условия. Это означает, что, если результат того, что между скобками, верный, то нудно сделатьто-то и то-то. Знаки

! $?

означают, что если ответ условия между кавычками

`` - NOT..., ps -ef

объясняет скрипту показывать processess..

|

знак - канал Unix, то есть когда нужно сделать некоторое действие с результатом. Я имею в виду, выполнють второе приложение, используя вывод первого как входные данные для обработки. Так

| grep $camd | grep-v grep`-eq 0

дважды фильтрует результаты команды

! $? `ps -ef

То есть получает список процессов и отправляет его команде grep чтобы получить результат после применения фильтра.

grep $camd

ищет экземпляры $camd (CCcam211). Затем результат отправляется другой команде grep, которая использует -v чтобы объяснить 2-ой команде grep как отфильтровывать экземпляры $camd.

-eq 0

Это означает, что значение равно 0.

В общем, мы ищем строку, указанную в переменной $camd в списке рабочих процессов, и если программа там не найдена (т.е. она не исполняется), то мы ее перезапускаем. Нужно удостовериться, что любые побочные коды, которые windows пишет в текстовый файл, удалены. То, что мы можем сделать, это передать файл по FTP в спутниковый ресивер, а затем выполнить команду dos2unix, чтобы конвертировать переносы строк.

root@dreambox:~# dos2unix cccamtest.sh

root@dreambox:~# chmod 755 cccamtest.sh

Можно теперь протестировать скрипт. При работе я загрузил файл в дректорию /root, которя является домашний диреторией текущего пользователя (root@dreambox). Перейдите в каталог, в который вы фотите загрузить файл. Чтобы перейти, используйте команду "cd ~", которая в bash открывает домашнюю директорию текущего пользователя.

root@dreambox:~ ./cccamtest.sh

Если Вы видите сообщение, говорящее что-то про неизвестный операнд и PID, не беспокойтесь. Это только вывод на консоль. Как можно заметить, я добавил строку, которая показывает что моя программа запустилась, а также для отображения результат проверки. Теперь все что осталось сделать -  это добавить задание Cron чтобы запускать скрипт каждую, скажем, минуту.

Откройте или создайте файл под названием cronjob.txt и добавьте в него новую строку, указанную Ниже. ВНИМАНИЕ, если у вас уже есть задания Cron, обязательно ДОБАЛЯЙТЕ строку в КОПИЮ существующего файла crontab.

*/1 * * * * /bin/sh /cccamtest.sh

root@dreambox:/# crontab cronjob.txt

Теперь запуск скрипта будет производиться автоматически каждую минуту. Самый короткий индеравал для Cron это минута, так что невозможно сделать так чтобы скрипт запускался чаще. В болшинстве ситуаций этого времени должно быть достаточно, потому что вряд ли ваш camd будет особенно часто зависать на первых секунах минуты.

 
cardshara-installers