Вы здесь

Проверка доступности интернет-сервиса

У меня есть будильник, который при наличие инета запускает инет-радио, иначе локальный плейлист. Вот этот кусок:

if [ `ping -c 1 ya.ru | head -n 5 | tail -n 1 | awk '{print $4}'` -eq 1 ]
    then mpc load alarm_online
    else mpc load alarm_offline
fi

мне не нравится, как выглядит проверка инета, хочется чего-то более лаконичного и надежного. Что можете предложить? И еще, думаю ya.ru заменить на адрес из alarm_online, в нем просто содержатся один или несколько адресов радио по строчкам.

ping -q -c 1 ya.ru > /dev/null 2>&1
if [ $? -eq 0 ]; then
...
fi

—

Не грусти, товарищ! Всё хорошо, beautiful good!

На трёх буквах много полезных примеров.

—

:wq
--
Live free or die

Anarchist написал:
На трёх буквах много полезных примеров.

...человек ведь конкретики попросил... Неужто для решения такой простой задачи, ему следует стать профессиональным программером?!

З.Ы.: сорь за офтоп...

... о, спасибо, очень полезный посыл на три буквы, нашёл там вот это 27-4. On-line connect , может поможет ...

SoiFong написал:
хочется чего-то более лаконичного и надежного. Что можете предложить?

Может всё же эффективного?

Хочу обратить внимание на тот факт, что для нормально функционирующих ресурсов Сети открытые извне пинги (протокол ICMP) --- скорее исключение, чем правило. Потому пинги я бы не назвал надёжным способом.

Лично я к радио отношусь крайне неодобрительно, потому относительно функционирования "инет-радио" совершенно не в курсе.
По идее должен использоваться протокол TCP...
Если не проверять отдельно ресолвинг имён (работоспособность DNS) и на данном доменном имени живёт не только радио, но и какой-никакой сайт, то я бы сказал, что здесь можно будет попытаться стянуть wget'ом (или что больше по вкусу) индексную страницу этого сайта (что, впрочем и строго говоря, не гарантирует работоспособности сервиса радиовещания).
Правильным же я бы наверное скорее назвал сначала попытку запуска будильника на радио, и в случае ошибок переключение на локальную коллекцию.

ЗЫ: Хороший сон и/или тихий системник :)))

—

:wq
--
Live free or die

У тебя поразительное свойство делать проблему из ничего. ICMP, если что, делался именно для того, чтобы диагностировать сетевые службы.

—

Не грусти, товарищ! Всё хорошо, beautiful good!

Я, что бы проверить есть ли подключение к инету проверяю поднят ли интерфейс ppp, что выполняется быстрее чем пинг

ifconfig | grep ppp
if [ $? = '0' ]; then
...
fi

Лаконичнее не получилось. Решил проверять доступность сервера телнетом, потому что на одном адресе может быть несколько станций на разных портах

address=`grep -oP '(?<=http://)[\w.-]*:\d*' sounds/alarm_online.m3u | head -1 | sed 's/:/ /'`
if echo q | telnet -e q $address | grep -oq Connected &> /dev/null
    then mpc load alarm_online
    else mpc load alarm_offline
fi

Кому интересно, весь скрипт выглядит так:

#!/bin/bash

maxvolume=100 # %
raisetime=60 # сек

volume=0
setmixer -V vol $volume
mpc clear

address=`grep -oP '(?<=http://)[\w.-]*:\d*' sounds/alarm_online.m3u | head -1 | sed 's/:/ /'`
if echo q | telnet -e q $address | grep -oq Connected &> /dev/null
    then mpc load alarm_online
    else mpc load alarm_offline
fi

mpc play

while [ "$volume" -le "$maxvolume" ]
do
    let volume++
    setmixer -V vol $volume
    sleep `echo "scale=3; $raisetime / $maxvolume" | bc`
done

потом он пихается в какой-нибудь планировщик. Для удобства, в кедах я использовал kalarm, в xfce - orage
тему переименовал правильнее