Устанавливаю соединение с инетом при помощи kppp. Все нормально. Однако, в какой то момент прекращается обмен данными. Коннект есть, ошибок нет. После повторного подключения ручками, как правило, усе опять работает. Ручками реконнектить лениво. Особенно, когда меня нет дома или сплю.
Собственно, проблемка то нарисовалась давно, когда еще модемом работал мобильник Siemens C55. Сейчас модем Huawei E220, однако, смена девайса не решила проблему. Похоже на какие то "особенности" оператора сотовой связи или базовой станции.
Скриптик на шелл, сохранен как ~/bin/inet.sh. Пока первые рабочие наброски.
#!/bin/sh # запускать бум по крону раз в иногда, при загрузке компа да на случай, если срубиццо # */5 * * * * ~/bin/inet.sh 1>>~/inet.log 2>&1 # вывод в лог для отладки # хосты для теста testhost1="ya.ru" testhost2="news.kraft-s.ru" # модем #dev_modem="/dev/ttyUSB0" # не... лучше так, потому как он периодически "плавает"... при случае следует порыться в udev dev_modem="/dev/"`ls /dev | grep ttyUSB | sed '1!d'` # не факт что нет лишних путей, скопипейстил тупо PATH="/home/vk/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin:/usr/games:/usr/X11R6/bin" # при запуске из крона нужно таки определить X-сервер, тож скопипейстил DISPLAY=":0.0" echo echo `date`" ============== Старт скрипта ==============" # если есть запущенный экземпляр скрипта if [ 3 -lt `ps ax | grep "/bin/sh.*inet.sh" | grep -v grep | wc -l` ] then # то выход echo "Скрипт уже запущен, бай." exit 0 fi # если нет запущенного kppp if [ 0 -eq `ps x | grep kppp | grep -v grep | wc -l` ] then # то запускаем echo `date`" Запускаем kppp..." kppp --display $DISPLAY -c mobilko -m e220_mega --dev $dev_modem & sleep 15 else echo `date`" kppp уже был запущен ранее, продолжаем" fi # проверка связи # 6 попыток через 15 секунд (с таймаутом - через 30) numbers=0 # счетчик неудачных попыток while [ 6 -gt $numbers ] do sleep 15 # он еще не помер? if [ 0 -eq `ps x | grep kppp | grep -v grep | wc -l` ] then echo `date`" ======== Уйбля, kppp потерялсо... ==========" exit 0 fi # теперь пиннем контрольные хосты # первый if [[ 1 -eq `host $testhost1 2>/dev/null | grep "timed out" | wc -l` ]] then res1=1 else res1=`ping -c 1 $testhost1 2>/dev/null | grep "100% packet loss" | wc -l` fi # второй if [[ 1 -eq `host $testhost2 2>/dev/null | grep "timed out" | wc -l` ]] then res2=1 else res2=`ping -c 1 $testhost2 2>/dev/null | grep "100% packet loss" | wc -l` fi # сумма (( res=$res1+$res2 )) # счет if [[ 2 -eq $res ]] then (( numbers++ )) else numbers=0 # сброс счетчика fi echo `date`" Обломов: $numbers" done echo `date`" Отрубаем kppp" kppp --display $DISPLAY -k 2>/dev/null & sleep 30 # если что то осталось while [ 0 -lt `ps ax | grep kppp | grep -v grep | wc -l` ] do kill -9 `ps ax | grep kppp | grep -v grep | awk '{print $1}'` done echo `date`" ========== Конец скрипта ============" exit 0
[1] - решение проблемы с подключением к иксам из скрипта, запущенного не в контексте X-сессии