繁体   English   中英

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

[英]How to check if a server is running

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

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

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

我建议不要只使用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

在哪里

  • HOST = [您主机的 ip 或 dns-name]

  • (可选) PORT = [可选端口; 不要忘记开始: ]

  • 200是正常成功http_response

  • 403是一个重定向,例如可能到登录页面,所以也可以访问,很可能意味着服务运行正常

  • -s静默或安静模式。

  • -L定义位置

  • -w以哪种格式显示响应
    -> %{http_code}\\n我们只想要 http_code

  • -o输出文件
    -> /dev/null将任何输出重定向到 /dev/null,因此它不会写入 stdout 或check变量。 通常你会在 http_response 之前获得完整的 html 源代码,所以你也必须保持沉默。


数控

曼恩

虽然curl对我来说似乎是 Webservices 的最佳选择,因为它确实在检查服务的网页是否正常工作,

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-name]

  • PORT = [不是可选的端口]

  • -4强制 IPv4(或-6用于 IPv6)

  • -d不要尝试从标准输入读取

  • -z只听,不发送数据

  • -w超时
    如果连接和 stdin 空闲时间超过 timeout 秒,则连接将被静默关闭。 (在这种情况下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

将 -c 选项与 ping 一起使用,它只会 ping URL 给定的次数或直到超时

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/

我使用以下脚本函数来检查服务器是否在线。 当您要检查多个服务器时,它很有用。 该功能隐藏 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

一个好的解决方案是将 MRTG(一种用于 *NIX 的简单图形工具)与 ping-probe 脚本一起使用。 在谷歌上查找。

阅读本文作为开始。

示例图:

示例图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM