272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,623
1

Узнать занят ли порт

30.06.2017, 09:41. Показов 4838. Ответов 2
Метки нет (Все метки)

Добрый день, подскажите плиииз.

Нужна конструкция в баше типа if(port_used(3000)){ }else{}

Понимаю что в баше (с парсерами) можно все, но не представляю куда гуглить...

Не по теме:

Пишу сервер на Java-spring. Который обновляется дистанционно. Отключается старый сервер и включается новый. Если новый не включился (ошибок в java может быть много - парсить все бесполезно, но при удаче ВСЕГДА "захватывается" порт 3000) скрипт должен выслать мне предупреждение и "вернуть прошлую версию" иначе выслать "обновление прошло удачно".

0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2017, 09:41
Ответы с готовыми решениями:

Как узнать кем занят порт
При запуске программы(не важно какой), выходит сообщение, порт 80 занят, тогда набираю netstat...

В конфигурационном файле прописан порт, но пишет ошибку порт 80 занят другим приложением
Здравствуйте. Пишу решение с 2 проектами - сервер и клиент с дуплексным контрактом. Служба...

Занят порт 80
Вчера обновился до windows 10. сегодня пытаюсь запустить сервер, пишет что порт 80 занят службами...

Занят порт
Написал WCF Library class, и пытаюсь его протестировать wcftestclient'ом, но получаю ошибку, что...

2
Покинул форум
3849 / 1241 / 329
Регистрация: 07.05.2015
Сообщений: 2,478
30.06.2017, 11:48 2
Лучший ответ Сообщение было отмечено andyj как решение

Решение

Как вариант:
Bash
1
2
3
4
5
if lsof -Pi :3000 -sTCP:LISTEN -t >/dev/nul; then
   echo "Порт занят"
else
   echo "Порт свободен"
fi
Хотя можно использовать nc или еще что-то в это роде. А вообще, если пишется что-то на Java, то на Java лучше все и проверять.
2
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,623
30.06.2017, 16:36  [ТС] 3
Цитата Сообщение от greg zakharov Посмотреть сообщение
Как вариант:
Идеально! Спасибо!
Чуть доработал (порт вынес в переменную/шапку):
Bash
1
2
3
4
5
6
port=3000
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/nul; then
   echo "Порт $port занят"
else
   echo "Порт $port свободен"
fi
Пытался через
Bash
1
2
3
4
5
6
        res1=$(netstat -lnt | awk '$6 == "LISTEN" && $4 ~ ".8080"');
    if [ "$res1" != '' ]; then
        echo "OK ..."
    else
        echo "EMPTY ..."
    fi
, но мне знаний bash не хватило чтобы динамически/переменной порт менять

Не по теме:


Цитата Сообщение от greg zakharov Посмотреть сообщение
если пишется что-то на Java, то на Java лучше все и проверять
Не уверен что лучше. И не знаю как это сделать из java! Если запускаю WAR-файл из сервиса, то получаю код процесса (для kill при stop сервиса) и занятый порт. Все происходит "тихо" (например при перезагрузке линукса) и либо работает, либо нет... Если не работает то порт свободен и до обработчиков Java код не доходит (например лог нечем писать или почту отправить) - просто выход с ошибкой. А мне нужно "проверку успешности запуска" отловить в баше - например при неудаче вернуть старую версию и отправить письмо об ошибке

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2017, 16:36
Помогаю со студенческими работами здесь

Определить, занят ли COM-порт
Добрый день! В программе используются несколько com портов. Как можно проверить используется ли...

Glassfish. Занят порт 4848
Всем привет. У меня стоит Ubuntu 14.05, попробовал поставить Glassfish 3.0.1 по вот этому мануалу и...

Прокси сервер. Порт занят
При запуске прокси сервера TcpListener на 80 порту, выходит ошибка Обычно разрешается только одно...

TCP/IP ошибка о net.sockets.(Порт занят)
Вот такой трабл.На VB.NEt при работе с TCP/IP протоколом при использовании не стандартного порта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru