Search code examples
linuxbashredhatrhel

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


RHEL 7.1 is the OS this will be used on.

I have two servers which are identical (A and B). Server B needs to monitor a port on Server A and if it's down for 30 seconds, launch a script. I read netcat was replaced with ncat on RHEL 7 so this is what I have so far:

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

If the port is up, the output is 0. If the port is down, the output is 1. I'm just not sure on how to do the next part which would be "if down for 30 seconds, then launch x script"

Any help would be appreciated. Thanks in advance.


Solution

  • If you really want to script this rather than using a dedicated tool like Pacemaker as @CharlesDuffy suggested, then you could do something like this:

    • Run an infinite loop
    • Check the port
      • If up, save the timestamp
      • Otherwise check the difference from the last saved timestamp
        • If more time passed then threshold, then run the script
    • Sleep a bit

    For example:

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