Рискну утверждать, что в /etc/network/interfaces
вместо
ifconfig dvb0_0 172.18.xx.xx hw ether 00:00:AC:12:xx:xx netmask 255.255.255.0 upнадо сделать
up ifconfig dvb0_0 172.18.xx.xx hw ether 00:00:AC:12:xx:xx netmask 255.255.255.0 upИли так:
up sh -c 'ifconfig dvb0_0 172.18.xx.xx hw ether 00:00:AC:12:xx:xx netmask 255.255.255.0 up'Поскольку
man interfaces | grep ifconfig
не выдаёт результата, то ifconfig это отдельно запускаемая, известная и стандартная утилита, а не специальная инструкция-тег. Запуск утилит в /etc/network/interfaces возможен при использовании тега up. Нет тега - и не работает. Я так думаю.
Когда станет понятно со строчкой про ifconfig, можно поразбираться со строчкой про szap.
Не знаю как проверяется залочился или нет сигнал при запуске. По всей видимости этот (сабжевый) способ подключения автоматизирован недостаточно и надо
/usr/bin/szap -c /etc/channels.conf -n 1 -x -l 5150,5150,0
запускать несколько раз, до тех пор пока "не наступит нужное". В цикле анализировать результат каждого запуска szap, пока не наступит успех. Если есть утилита, которая выдаёт в консоли всегда одинаковый текст при удавшейся залочке, а при неудачной залочке не выдаёт этого текста или выдаёт другой, но тоже всегда одинаковый текст, то могу попытаться написать скриптик. Но не смогу отладить у себя...
Вместо такого текста можно анализировать значение возвращаемое утилитой szap по окончании работы, но понятия не имею что возвращает szap, есть ли однозначная связь этого значения с залочкой. И ещё вариант придумал

- можно просто проверять "пингуемость" и по результататам перезапускать сеть.
Если внутрь файла ping-catch.sh записать код, что за спойлером
#!/bin/bash
# сервер для проверки, доменное имя или ip адрес
TEST_SERVER_ADDRESS="www.ubuntu.com"
# время в течении которого ждать пинга
PING_TIME_OUT="60"
# сколько раз перезапускать сеть
MAXIMUM_RESTART_COUNTER_VALUE="5"
SENSOR=""
i=0
while :
do
# '-c 1' для ping означает количество пингов, выбран только один пинг, можно больше
SENSOR="$(ping -c 1 -w $PING_TIME_OUT $TEST_SERVER_ADDRESS | grep "100\% packet loss")"
i=$(($i+1))
if [ -z "$SENSOR" ]
then
echo "Internet is up."
exit 0
else
echo "Attempt number $i. No ping detected, restarting networking."
# следующая строка требует привелигий суперпользователя
/etc/init.d/networking restart
if [ "$i" == "$MAXIMUM_RESTART_COUNTER_VALUE" ] ; then
exit 1
fi
fi
done
И сделать
chmod +x ping-catch.sh
То при запуске ping-catch.sh будет проверено наличие хоть какого пинга до сервера TEST_SERVER_ADDRESS в течении количества секунд равного PING_TIME_OUT.
Если пинг был, то скрипт прервётся.
Если пинга не было, будет сделан "перезапуск сети" и повторная попытка пинга, число попыток перезапуска равно MAXIMUM_RESTART_COUNTER_VALUE.
Запуск ping-catch.sh можно вписать в /etc/rc.local
Он запускается при загрузке, после всех системных скриптов инициализации, команды оттуда запускаются от имени рута и ввод пароля не потребуется.
В теории надо у пользователей отобрать права на изменение ping-catch.sh, но это уже заморочка для админов на работе.
P.S. Если "не лочится" редко, то может быть проще делать
sudo /etc/init.d/networking restart
чем писать скрипт.
/etc/init.d/networking это скрипт который запускает всё нужное для включения сетевых интерфейсов, обычно у него используются параметры start, stop и restart.