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