Linux 监控远程端口的脚本,如果不成功则启动脚本

Linux script to monitor remote port and launch script if not successful

RHEL 7.1 是 OS 这将用于。

我有两台相同的服务器(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。我只是不确定如何进行下一部分 "if down for 30 seconds, then launch x script"

如有任何帮助,我们将不胜感激。提前致谢。

#!/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

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

  • 运行无限循环
  • 检查端口
    • 如果up,保存时间戳
    • 否则检查与上次保存的时间戳的区别
      • 如果超过阈值的时间,则运行脚本
  • 睡一会

例如:

#!/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

使用 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;