URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8940
[ Назад ]

Исходное сообщение
"Помогите с проверкой открытого порта"

Отправлено dro salevan , 29-Ноя-10 18:02 
Требуется раз в 5 минут проверять открыт ли порт

делаю так
if [ -z $(netstat -nl|grep -os 8081) ]

then
действие
else
echo ok;
fi

Система ubuntu server

когда действительно порт открыт и виден по нетстату то вылезает оишибка
"ожидается использование бинарного..."

хотя все работает.
может что-то не так я делаю?


Содержание

Сообщения в этом обсуждении
"Помогите с проверкой открытого порта"
Отправлено jd , 29-Ноя-10 23:53 
> может что-то не так я делаю?

Определённо. Например, пишете, что вылезает ошибка, а что за ошибка - целиком не приводите, а приводите какой-то её кусок. Кто её выдаёт - тоже не пишете, хотя вам bash говорит, что это он. Тем более, что сообщение по-русски, то есть все, у кого локаль настроена на английские сообщения, должны догадываться, от чего это мог бы быть кусок.

Также, зачем писать такой ужас, когда можно вместо первой строчки сделать так:

if netstat -nl | grep -q 8081

Конечно, блоки кода внутри if и else нужно будет поменять местами или добавить "!" после if.
Если планируется потом использовать скрипт на другой платформе, лучше вместо опции grep -q использовать "> /dev/null", так как не все grep'ы одинаково кошерны, но скорее всего для вас это не актуально.

Ещё рекомендую добавить опцию netstat --inet.

Что касается самой ошибки, то вероятно она из-за того, что результатом $(...) является строка с пробелом и проверка превращается во что-то вроде

if [ -z 8081 8081 ]

то есть является некорректной с точки зрения синтаксиса bash. Если уж делать так, то нужно взять $(...) в кавычки.

"Помогите с проверкой открытого порта"
Отправлено dro salevan , 30-Ноя-10 09:29 
Благодарю за развернутый ответ и помощь.
Хорошего Вам дня!
Спасибо!


"Помогите с проверкой открытого порта"
Отправлено cryo , 01-Дек-10 14:18 
Для вящей совместимости можно и редиректы выкинуть.

if [ `netstat -nl | grep -c \.8081` -gt 0 ]; then
echo yes;
else
echo no;
fi

\.8081 - точка чтоб скрипт не реагировал на набор 8081 в, например, адресах UNIX-сокетов в выводе netstat.


"Помогите с проверкой открытого порта"
Отправлено pavlinux , 01-Дек-10 23:46 
>[оверквотинг удален]
> then
>  действие
> else
>  echo ok;
> fi
> Система ubuntu server
> когда действительно порт открыт и виден по нетстату то вылезает оишибка
> "ожидается использование бинарного..."
> хотя все работает.
> может что-то не так я делаю?

function deistvie() {

    echo "ACHTUNG ACHTUNG ACHTUNG" |  wall;
}

while true
     do
        echo | nc 208.68.163.220 5222
        [ $? == 0 ] && deistvie || echo SLEEP;
        sleep ( 300 )
done;