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

a11xaf1n  于 2023-02-03  发布在  Linux
关注(0)|答案(6)|浏览(246)

我想使用ping来检查服务器是否已启动。我应该如何执行以下操作:

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

我该如何完成上述操作?另外,我该如何使它在第一次ping响应时返回0,或者在前十次ping失败时返回错误?或者,有没有更好的方法来完成我在上面尝试做的事情?

svdrlsy4

svdrlsy41#

我建议不要只使用ping,它可以检查服务器是否在线,但不能检查该服务器上的特定服务。
最好使用以下替代方法:

curl

man curl
您可以使用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

其中

  • HOST = [您的主机的IP或DNS名称]
  • (可选)PORT = [可选一个端口;不要忘记以:开头]
  • 200是正常的成功http_response
  • 403是一个重定向,例如,可能是登录页面,因此也是可访问的,并且很可能意味着服务运行正常
  • -s静默模式。
  • -L定义位置
  • -w要以哪种格式显示响应
  • %{http_code}\n我们只需要http代码
  • -o输出文件
  • /dev/null将任何输出重定向到/dev/null,这样它就不会被写入stdout或check变量。通常你会在http_response之前得到完整的html源代码,所以你也必须将其静音。

数控

man nc
虽然curl在我看来似乎是Webservices的最佳选择,因为它实际上是检查服务的网页是否正常工作,
nc可用于仅快速检查目标上的特定端口是否可达(并且假设这也适用于服务)。
这里的优势是可设置的超时,例如1秒,而curl可能需要更长的时间才能失败,当然,你也可以检查不是网页的服务,如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

其中

  • HOST = [您的主机的IP或DNS名称]
  • PORT = [非可选端口]
  • -4强制使用IPv4(或-6强制使用IPv6)
  • -d不要尝试从标准输入读取
  • -z仅侦听,不发送数据
  • -w超时

如果连接和标准输入空闲时间超过timeout秒,则连接会自动关闭(在这种情况下nc将退出1 -〉failure)。

  • (可选)-n如果您只使用IP:不要在任何指定的地址、主机名或端口上执行任何DNS或服务查找。
  • &> /dev/null不打印命令的任何输出
rpppsulh

rpppsulh2#

你可以用这样的东西-

serverResponse=`wget --server-response --max-redirect=0 ${URL} 2>&1`

if [[ $serverResponse == *"Connection refused"* ]]
then
    echo "Unable to reach given URL"
    exit 1
fi
y1aodyip

y1aodyip3#

在ping命令中使用-c选项,它只会ping URL给定的次数或直到超时

if ping -c 10 $URL; then
    echo "server live"
else
    echo "server down"
fi
0tdrvxhp

0tdrvxhp4#

简式:

ping -c5 $SERVER || echo 'Server down'

你需要它来编写其他脚本吗?或者是尝试破解一些简单的监控工具吗?在这种情况下,你可能想看看Pingdom:https://www.pingdom.com/ .

fd3cxomn

fd3cxomn5#

我使用下面的脚本函数来检查服务器是否在线。当你想检查多个服务器时,它很有用。该函数隐藏了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
bxfogqkk

bxfogqkk6#

一个很好的解决方案是使用MRTG(一个简单的绘图工具 *NIX)与ping探针脚本。
读取this作为开始。
示例图:

相关问题