Linux脚本用于监视远程端口和启动脚本(如果不成功)

时间:2016-08-29 22:13:25

标签: linux bash redhat rhel

RHEL 7.1是将使用的操作系统。

我有两台相同的服务器(A和B)。服务器B需要监视服务器A上的端口,如果它停机30秒,则启动脚本。我读到netcat在RHEL 7上被ncat取代,所以这就是我到目前为止所做的:

#!/bin/bash
Server=10.0.0.1
Port=123
ncat $Server $Port &> /dev/null; echo $?

如果端口已启动,则输出为0.如果端口已关闭,则输出为1.我只是不确定如何执行下一部分将是"如果为30秒,然后启动x脚本"

任何帮助将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:1)

#!/bin/bash
Server=10.0.0.1
Port=123
port_was_down=0
while true; do
    sleep 30
    if ! ncat $Server $Port &> /dev/null; then
        if [[ $port_was_down == "1" ]]; then
            run-script
            exit
        else
            port_was_down=1
        fi
    else
        port_was_down=0
    fi
done

答案 1 :(得分:1)

如果你真的想编写脚本而不是使用Pacemaker之类的专用工具作为@CharlesDuffy建议,那么你可以这样做:

  • 运行无限循环
  • 检查端口
    • 如果向上,请保存时间戳
    • 否则,请检查与上次保存的时间戳的差异
      • 如果时间超过阈值,则运行脚本
  • 睡了一下

例如:

#!/bin/bash

server=10.0.0.1
port=123
seconds=30

seen=$(date +%s)
while :; do
    now=$(date +%s)
    if ncat $server $port &> /dev/null; then
        seen=$now
    else
        if ((now - seen > seconds)); then
            run-script && exit
        fi
    fi
    sleep 1
done

答案 2 :(得分:0)

使用nmap怎么样? 类似的东西:

TIMEOUT=30s;
HOST=10.0.0.1;
PORT=123; 
if nmap --max-rtt-timeout $TIMEOUT --min-rtt-timeout $TIMEOUT -p $PORT $HOST  | grep "^$PORT.*open"; then 
    echo 'OPEN';
else 
    echo 'CLOSED';
fi;
相关问题