ping $URL
if [$? -eq 0]; then
echo "server live"
else
echo "server down"
fi
我该如何完成上述任务?另外,如何使它在第一次Ping响应时返回0,或者如果前十个ping失败则返回错误?或者,有没有更好的方法来完成我尝试做的事情?
我建议不要仅使用 ping
。它可以检查服务器是否在线,但无法检查该服务器上的特定服务。
最好使用以下替代方案:
您可以使用 curl
并检查像这样的 webservice 的 http_response
check=$(curl -s -w "%{http_code}\n" -L "${HOST}${PORT}/" -o /dev/null)
if [[ $check == 200 || $check == 403 ]]
then
# Service is online
echo "Service is online"
exit 0
else
# Service is offline or not working correctly
echo "Service is offline or not working correctly"
exit 1
fi
where
HOST
= [主机的IP地址或DNS名称]
(可选)PORT
= [端口号,记得以:
开头]
200
是正常的成功http响应
403
是重定向,例如可能是到登录页面,所以也可以接受,并且很有可能表示服务正在正确运行
-s
静默模式.
-L
定义位置。
-w
你想要以什么格式显示响应
-> %{http_code}\n
我们只想要http_code
-o
输出文件
-> /dev/null
将任何输出重定向到/dev/null,以便不会写入stdout或检查变量。通常,在http响应之前您会获得完整的html源代码,因此您也必须使其静音。
对于Web服务而言,curl
似乎是最好的选择,因为它真正检查服务的网页是否正常工作,
nc
可用于快速检查目标上的特定端口是否可达(并假设这也适用于该服务)。
在此处的优势是可设置的超时时间,例如1秒钟,而curl可能需要更长时间才能失败,并且当然您还可以检查不是像SSH端口22那样的网页服务。
nc -4 -d -z -w 1 ${HOST} ${PORT} &> /dev/null
if [[ $? == 0 ]]
then
# Port is reached
echo "Service is online!"
exit 0
else
# Port is unreachable
echo "Service is offline!"
exit 1
fi
其中
HOST
= [您的主机的IP地址或DNS名称]
PORT
= [必填项端口号]
-4
强制使用IPv4(或-6
使用IPv6)
-d
不尝试从标准输入读取数据
-z
仅监听,不发送数据
-w
超时时间
如果连接和标准输入在超过超时时间后没有活动,则连接会被静默关闭。(在这种情况下,nc
将返回1 -> 失败。)
(可选项)-n
如果只使用IP:不对任何指定的地址、主机名或端口进行DNS或服务查找。
&> /dev/null
不打印出任何命令输出。
你可以使用类似这样的代码 -
serverResponse=`wget --server-response --max-redirect=0 ${URL} 2>&1`
if [[ $serverResponse == *"Connection refused"* ]]
then
echo "Unable to reach given URL"
exit 1
fi
使用ping命令的-c选项,可以仅对指定的URL进行一定次数的ping测试或直到超时。
if ping -c 10 $URL; then
echo "server live"
else
echo "server down"
fi
缩写:
ping -c5 $SERVER || echo 'Server down'
你需要它用于其他脚本吗?或者你想要攻击某些简单的监控工具吗?如果是这样,你可以看一下Pingdom:https://www.pingdom.com/。
#!/bin/bash
#retry count of ping request
RETRYCOUNT=1;
#pingServer: implement ping server functionality.
#Param1: server hostname to ping
function pingServer {
#echo Checking server: $1
ping -c $RETRYCOUNT $1 > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo $1 down
else
echo $1 live
fi
}
#usage example, pinging some host
pingServer google.com
pingServer server1
[
和]
周围添加空格,或者仅编写以下代码:if ping $URL ; then
。 - Basile Starynkevitchping -c 1
。 - tripleee