Script to Proceed to the Next IP if the current IP hangs


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Script to Proceed to the Next IP if the current IP hangs
# 1  
Old 10-08-2017
Script to Proceed to the Next IP if the current IP hangs

Hi there,

Say I have a list of IPs, I am running scripts on them. If the process hang.
I want to continue with the rest of the IPs.

Code:
10.11.1.1
10.11.1.2
10.11.1.3
10.11.1.4
10.11.1.5
10.11.1.6 <-- Process Hangs here
10.11.1.7
10.11.1.8
10.11.1.9
10.11.1.10
10.11.1.11
10.11.1.12

-----------------------

Code:
10.11.1.7 <--- start a new process from this point onwards.
10.11.1.8
10.11.1.9
10.11.1.10
10.11.1.11
10.11.1.12

How can this be achieved?

Last edited by jim mcnamara; 10-14-2017 at 08:52 AM..
# 2  
Old 10-08-2017
What do you mean with "hangs" ? Do you mean the timeout that occurs when a server is unreachable or down?

Are you referring to a shell script loop from within which ssh commands are used to perform remote tasks? If so you could try something like:

Code:
ssh -o ConnectTimeout=2

From man ssh_config:
Code:
     ConnectTimeout
             Specifies the timeout (in seconds) used when connecting to the SSH server, instead of using the default system TCP timeout.  This value is used only when the target is down or
             really unreachable, not when it refuses the connection.

Note that, like it says, this timeout will not work with hosts that refuse connection..
# 3  
Old 10-08-2017
Yes, when it is timeout, it will move on to the next item in the loop.
# 4  
Old 10-08-2017
Hi,

Without knowing any actual details of what your script does or contains, it's hard to give you a definitively correct answer here. But in terms of a general principle, you could process each IP in a loop, run your script for each IP in the background, then wait a number of seconds before proceeding to the next one in the loop. That way at least you would be able to continue with each IP in the list.

So for example, something like this:

Code:
for ip in `cat ip-list.txt`
do
        ./script.sh "$ip" &
        sleep 300
done

Now I'm making a great deal of assumptions here, since you haven't given us any actual code of your own or any details about what precisely you're trying to do to each IP. But the above code fragment would iterate through every IP address in the file ip-list.txt and run the external script ./script.sh on it in the background. It would then pause for five minutes (300 seconds), and proceed regardless of the outcome with the next one in the list.

There are many potential problems with this approach, but this is about as generic a solution as I can suggest without anything detailed to actually go on. Hope this helps.
# 5  
Old 10-14-2017
HI all,

I am actually look at ways to restart a process if it hangs.
The line I highlighted in red sometime work, it will continue to the next line.
If it doesn't work,I would expect a way to restart that line first before proceeding to the next line.
Hope you can advise.

Code:
while read ip; do
    echo -e "${BLUE}[+]${RESET} Scanning $ip for $proto ports..."

    # unicornscan identifies all open TCP ports
    if [[ $proto == "tcp" || $proto == "all" ]]; then 
        echo -e "${BLUE}[+]${RESET} Obtaining all open TCP ports using unicornscan..."
        echo -e "${BLUE}[+]${RESET} unicornscan -i ${iface} -r20000 -mT ${ip}:a -l ${log_dir}/udir/${ip}-tcp.txt"
        unicornscan -i ${iface} -mT ${ip}:a  -r20000 -l ${log_dir}/udir/${ip}-tcp.txt
        ports=$(cat "${log_dir}/udir/${ip}-tcp.txt" | grep open | cut -d"[" -f2 | cut -d"]" -f1 | sed 's/ //g' | tr '\n' ',')
        if [[ ! -z $ports ]]; then 
            # nmap follows up
            echo -e "${GREEN}[*]${RESET} TCP ports for nmap to scan: $ports"
            echo -e "${BLUE}[+]${RESET} nmap -e ${iface} ${nmap_opt} -oA ${log_dir}/ndir/${ip}-tcp -p ${ports} ${ip}"
            nmap -e ${iface} ${nmap_opt} -oA ${log_dir}/ndir/${ip}-tcp -p ${ports} ${ip}
        else
            echo -e "${RED}[!]${RESET} No TCP ports found"
        fi
    fi

# 6  
Old 10-14-2017
Hi.

Rather than waiting for something to finish before starting the next task, I find that pdsh performing remote tasks in parallel is most useful for our situation. There is a timeout option (along with many other options).

Some details for pdsh (which calls pdsh.bin):
Code:
pdsh    issue commands to groups of hosts in parallel (man)
Path    : /usr/bin/pdsh
Version : -2.31 (+debug)
Length  : 15 lines
Type    : Bourne-Again shell script, ASCII text executable
Shebang : #! /bin/bash
Repo    : Debian 8.9 (jessie) 
Home    : https://computing.llnl.gov/linux/pdsh.html (pm)

See man pdsh, and note that there are several alternate codes that may be considered as a result of searching for alternatives to pdsh -- for example see:

remote - What is a good modern parallel SSH tool? - Server Fault

remote access - Linux - Running The Same Command on Many Machines at Once - Server Fault

Best wishes ... cheers, drl

Last edited by drl; 10-14-2017 at 08:54 AM.. Reason: Added links.
# 7  
Old 10-14-2017
Quote:
Originally Posted by alvinoo
I am actually look at ways to restart a process if it hangs.
The line I highlighted in red sometime work, it will continue to the next line.
If it doesn't work
Code:
        unicornscan -i ${iface} -mT ${ip}:a  -r20000 -l ${log_dir}/udir/${ip}-tcp.txt

The problem is: we do not really know what "doesn't work" means. If it is that the quoted line just hangs and doesn't finish: start it in the background and have a wait command at the end collecting all the hanging processes. There are a lot of threads here dealing with exactly this problem.

If you mean by "doesn't work" that the process just comes back unsuccessfully: usually a process has a return code. You can query this return code and re-run the process if it is not zero (0 usually means it was successful and everything else some sort of failure).

Replace the quoted line with something like this:

Code:
MAXRETRIES=<some number>       # define this at the beginning globally

...

(( iCnt = MAXRETRIES ))
while ! unicornscan -i ${iface} -mT ${ip}:a  -r20000 -l ${log_dir}/udir/${ip}-tcp.txt && [ $iCnt -gt 0 ] ; do
     (( iCnt -= 1 ))
done

This will try MAXRETRIES times to execute the code until it is either successful or the number of tries run out.

I hope this helps.

bakunin
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Expect script hangs Linux

When I run script listed below it causes my Linux to hang. When it freezes I can do totally nothing, move cursor, switch to another terminal or whatever. Linux is just not responding and the only way out I know is a hard reset of PC. #!/bin/bash if ; then echo "one parameter is needed: IP... (3 Replies)
Discussion started by: mass85
3 Replies

2. Shell Programming and Scripting

script hangs when reading from stdin

script: while read inputline; do if ; then if ; then break fi fi done Looks like the script hangs when stdin is empty or contains space. Any ideas on how to circumvent this? is it possible to use getline to process stdin content? (4 Replies)
Discussion started by: ux4me
4 Replies

3. Shell Programming and Scripting

Script Hangs!

Hi, I have script which is based on TCL and expect. It is written to test my code. It usually runs fine for a while and hangs after sometime. Code snippet set l_temp_timeout $timeout OUTPUT_LOG2 2 >>>$expect_out(buffer)<<< OUTPUT_LOG2 2... (2 Replies)
Discussion started by: naveenpn
2 Replies

4. Solaris

script hangs when outputing to /dev/console

I am running solaris 8 on a sparcs box. The system is connected to a lightwave console server. I have a script that hangs when sending output to '/dev/console'. Any ideas? -V (2 Replies)
Discussion started by: vada010
2 Replies

5. UNIX for Dummies Questions & Answers

proceed through a menu-based program with a script?

I am trying to figure out a way to proceed through a menu-based program in UNIX with just one command to execute several steps. Is this possible? From the command prompt I would normally type the name of the program, 'disk_analysis' to start the program and bring up its menu. I would then... (4 Replies)
Discussion started by: nichola$
4 Replies

6. Shell Programming and Scripting

Hi Python and shell script,the script hangs

Hi I need to run a shell script from a TCL script,the shell script in trun will run a python script 1.Tcl script set filename "./GopiRun.sh" 2.GopiRun.sh python ./psi.py $MYSB/test_scripts/delivery/gpy1.py 3.I have my gpy1.py script. Here the problem i am facing is on running... (0 Replies)
Discussion started by: nathgopi214
0 Replies

7. Shell Programming and Scripting

script hangs when a remote server is down

Hi all, I have made a script which logins to remote servers and fetches some data from it. Is is working perfectly when all servers are reachable BUT my problem is -- if in case a server is down (or not reachable), the script hangs. Is there some way, that the script just continues to ssh... (6 Replies)
Discussion started by: vikas027
6 Replies

8. Shell Programming and Scripting

script calling other scripts hangs

I have a script that calls several other scripts in a specified order: # Loop over actions in specified order (STOP_ORDER or START_ORDER) and build and evaluate commands for command in $(eval print '$'${action}_ORDER) do printf "`date`\tExecuting ${action}_${command} = `eval print... (1 Reply)
Discussion started by: rein
1 Replies

9. Linux

Script hangs on the unix server

We have a unix script scheduled to execute once in a day, some times it hangs on the server and never performs its operations, we need to manually kill the process and re-start that script, is there any way to have notification when the script hangs on the server. Thanks & Regards, Murthy. (3 Replies)
Discussion started by: Ramana Murthy
3 Replies

10. Solaris

script hangs-up at exit

I have a script that runs in verbose mode. At the end of the script it displays the final "exit" but then it hangs. What's going on?:( (5 Replies)
Discussion started by: davels
5 Replies
Login or Register to Ask a Question