Как я мог контролировать порт службы из оболочки bash?
Я хочу отслеживать службу Java (раз в минуту на порту 9090), а затем вызывать "/etc/init.d/myservice -restart", если служба не отвечает простым сообщением HTML.
Как бы вы сделали что-то подобное?
Моя идея заключалась в том, чтобы использовать что-то подобное:
wget -O - --no-check-certificate --progress=dot https://localhost:9090
Или
curl --insecure https://localhost:9090
Использовать контролировать, это более безопасно, чем писать для этого сценарий оболочки.
Если вы действительно хотите написать сценарий, используйте завиток чтобы получить контент, введите его и перезапустите службу в случае сбоя.
Спасибо "coredump". Вы подсказали мне, что нужно решить проблему. Я буду использовать комбинацию CURL, а также ответ на эта страница .
Вот то, что я придумал, и это, кажется, работает для меня. Если вы сможете улучшить этот ответ, я могу присудить вам баллы.
#!/bin/bash
rm -f listening.htm
curl -s --connect-timeout 10 --insecure $1 > listening.htm
RETVAL=$?
echo "Curl return value : $RETVAL"
if [ $RETVAL -eq 2 ]; then
echo "Missing URL parameter. Add URL and try again."
fi
if [ $RETVAL -eq 6 ]; then
echo "Unable to resolve host. Check URL and try again."
fi
if [ $RETVAL -eq 0 ]; then
echo "Is the site listening...?"
elif [ $RETVAL -eq 7 ]; then
echo "Server timeout."
elif [ $RETVAL -eq 22 ];then
echo "HTTP error above 400"
else
rm listening.htm
exit 1
fi
if grep -Fq "The site is listening..." listening.htm
then
echo "Health is ok."
else
echo "Service didn't respond. Stopping."
/home/ec2-user/SITE/stopService.sh
sleep 6
echo "Starting service."
/home/ec2-user/SITE/startService.sh
sleep 10
echo "Restarted at `date`" >> monitor.log
rm listening.htm
fi
exit 1