Я запускаю сценарий оболочки ниже на компьютере, на котором сервер приложений c ++ работает через порт 8080, и в сценарии оболочки я выполняю URL-адрес и сохраняю ответ, полученный с этого URL-адреса, в переменной DATA.
Но предположим, что если тот же сервер приложений не работает, он не сможет выполнить URL-адрес, затем он распечатает Retrying Again
и спит в течение 30 секунд, а затем снова выполнит тот же URL-адрес.
#!/bin/bash
HOSTNAME=$hostname
DATA=""
RETRY=15
echo $HOSTNAME
while [ $RETRY -gt 0 ]
do
DATA=$(wget -O - -q -t 1 http://$HOSTNAME:8080/beat)
if [ $? -eq 0 ]
then
break
else
echo "Retrying Again" >&2
# restart the server
let RETRY-=1
sleep 30
fi
done
echo "Server is UP"
А вот HOSTNAME
локальное имя хоста сервера, на котором я запускаю мой скрипт оболочки выше.
Постановка задачи:-
Теперь, что я пытаюсь сделать, если сервер не работает, он будет распечатан, Retrying Again
поэтому после этого я хочу проверить, 8080
открыт порт $HOSTNAME
или нет. Если нет, то это означает, что сервер не работает, поэтому я хочу перезапустить сервер, выполнив эту команду, а затем спать в течение 30 секунд, как показано выше в сценарии оболочки.
/opt/app/test/start_stop.sh start
Можно ли это сделать здесь, в моем сценарии оболочки выше?
Я запускаю этот скрипт на Ubuntu 12.04.
источник
lsof -i :8080 -sTCP:LISTEN
и я ничего не получаю на консоли, но если я пытаюсь это сделать,netstat -tulpn | grep :8080
то я получаю свой процесс, который работает на порту 8080, почему это так?netstat -tulpn | grep :8080
?david@machineA:/home/david$ netstat -tulpn | grep :8080 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 27530/test_server
lsof -iTCP -sTCP:LISTEN | grep 8080
?Самый простой способ в Bash. Проверьте, открыт ли ваш порт.
Замените эхо на то, что вы хотите.
Или вы можете использовать nc.
Возвращает:
источник
nc
отличное решение для моего случая использования; спасибо за предложениеРазработка ответа RJ, примечания
nc
также полезны ... Не толькоnc
полезны для быстрого запроса командной строкино его можно использовать без -v, если удобочитаемость не та, к которой вы стремитесь - например, для использования в скрипте (код выхода укажет, открыт порт или закрыт).
источник