我想使用ping来检查服务器是否已启动。我该怎么做:
ping $URL
if [$? -eq 0]; then
echo "server live"
else
echo "server down"
fi
我将如何完成上述任务?另外,如何在第一次ping响应时返回0,或者如果前十次ping失败则返回错误?或者,是否有更好的方法来完成我上面要做的事情?
答案 0 :(得分:8)
你可以使用这样的东西 -
serverResponse=`wget --server-response --max-redirect=0 ${URL} 2>&1`
if [[ $serverResponse == *"Connection refused"* ]]
then
echo "Unable to reach given URL"
exit 1
fi
答案 1 :(得分:6)
在ping时使用-c选项,它只会在给定次数或直到超时
的情况下ping URLif ping -c 10 $URL; then
echo "server live"
else
echo "server down"
fi
答案 2 :(得分:6)
我建议不要只使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
。它可以检查服务器是否在线,但是您无法检查该服务器上的特定服务。
更好地使用这些替代品:
您可以使用ping
并查看curl
以获取此类网络服务
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
= [您的主机的IP或DNS名称] HOST
= [可选端口;不要忘记从PORT
] :
正常成功http_response 200
是重定向,例如也许到登录页面也是可以接受的,很可能意味着服务正确运行
403
无声或安静模式。
-s
定义位置-L
您希望以何种格式显示回复-w
我们只想要http_code %{http_code}\n
输出文件-o
将任何输出重定向到/ dev / null,因此不会将其写入stdout或/dev/null
变量。通常你会在http_response之前得到完整的html源代码,所以你也要沉默。虽然check
对我来说似乎是Webservices的最佳选择,因为它确实检查服务的网页是否正常工作,
curl
只能用于快速检查目标上的特定端口是否可达(并假设这也适用于该服务)。
这里的优点是例如可设置的超时时间。 1秒钟,而curl可能需要更长时间才能失败,当然您也可以检查不是nc
端口22
之类的网页的服务。
SSH
,其中
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
= [您的主机的IP或DNS名称] HOST
= [非可选端口] PORT
强制IPv4(或-4
for IPv6)-6
不要尝试从stdin中读取-d
只听,不发送数据-z
超时-w
将退出1 - >失败。)(可选)nc
如果您只使用IP:请勿在任何指定的地址,主机名或端口上执行任何DNS或服务查找。
-n
不要打印出命令的任何输出
答案 3 :(得分:4)
简短形式:
ping -c5 $SERVER || echo 'Server down'
你需要它用于其他一些脚本吗?或者正在尝试破解一些简单的监控工具?在这种情况下,您可能需要查看Pingdom:https://www.pingdom.com/。
答案 4 :(得分:3)
我使用以下脚本功能检查服务器是否在线。当您想要检查多个服务器时,它很有用。该功能隐藏了ping输出,您可以单独处理服务器实时或服务器关闭情况。
#!/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
答案 5 :(得分:1)