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脚本"
任何帮助将不胜感激。提前谢谢。
答案 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;