如何检查服务器是否正在运行

时间:2013-04-12 20:23:54

标签: linux bash shell unix ping

我想使用ping来检查服务器是否已启动。我该怎么做:

ping $URL
if [$? -eq 0]; then
    echo "server live"
else
    echo "server down"
fi

我将如何完成上述任务?另外,如何在第一次ping响应时返回0,或者如果前十次ping失败则返回错误?或者,是否有更好的方法来完成我上面要做的事情?

6 个答案:

答案 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 URL
if 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>。它可以检查服务器是否在线,但是您无法检查该服务器上的特定服务。

更好地使用这些替代品:

卷曲

man curl

您可以使用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您希望以何种格式显示回复
    - &GT; -w我们只想要http_code
  • %{http_code}\n输出文件
    - &GT; -o将任何输出重定向到/ dev / null,因此不会将其写入stdout或/dev/null变量。通常你会在http_response之前得到完整的html源代码,所以你也要沉默。

NC

man nc

虽然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超时
    如果连接和stdin空闲超过超时秒数,则会以静默方式关闭连接。 (在这种情况下,-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)

一个好的解决方案是使用MRTG(一个简单的* NIX图形工具)和ping-probe脚本。在Google上查找。

请先阅读this

示例图表:

Sample Graph