0

I have this bash setup configured to run in tandem with a Wifi manager, which provides events like HOTSPOT, CONNECTING, CONNECTED

I want to run scripts based on events and return immediately, not wait for the scripts to finish, because the Wifi manager would temporarily pause until scripts are run.

#!/bin/bash

Logfile="/home/arjun/Desktop/bash/logfile.txt"

echo "Started" >> $Logfile

if [ "$1" == "CONNECTING" ]; then
    echo "args CONNECTING" >> $Logfile

elif [ "$1" == "HOTSPOT" ]; then
    echo "args HOTSPOT" >> $Logfile
    kill $(< my_sinatra_server.pid)

elif [ "$1" == "CONNECTED" ]; then
    echo "args CONNECTED" >> $Logfile   

    nohup ~/Desktop/ruby/sinatra/api/api.rb >> /log/file 2>&1 &
    echo $! > my_sinatra_server.pid
    echo "PID is $(< my_sinatra_server.pid)"

else
    echo "Invalid args" >> $Logfile
fi

echo "bye:-)" >> $Logfile

What I have runs properly, but I would also have other scripts to be run, and Python and a Nodejs script.

How can I add those as well. Is it similar to nohup for Ruby? Add a new line of nohup after that for each script? Will those introduce any delay in handing back control?

And if I want to delegate this to another executable bash file, will it be a simple case of copying all those nohup commands to the new bash file and return control to the Wifi manager immediately? Will this be much better? How can I do this then?

0

Is it similar to nohup for Ruby? Add a new line of nohup after that for each script? Will those introduce any delay in handing back control?

The pattern you've established with the nohup followed by your command backgrounded & and the logging of the PID $! to a file is the typical pattern you'll see used for this type of work.

Simply continue using that pattern and background all the processes you want to launch in this manner, and log their PIDs to files.

And if I want to delegate this to another executable bash file, will it be a simple case of copying all those nohup commands to the new bash file and return control to the Wifi manager immediately? Will this be much better? How can I do this then?

Yes you can move all these commands to another script and simply call them via a single call. Whether this ia better/worse is hard to say, it's entirely up to what you're trying to accomplish and how you want to manage these things.

In terms of how to do this, it seems like you already know what to do. Put everything in a script and call it from the WiFi manager application.

You might need to pass some arguments into that script. For that you can simply use the call to this script like so:

my_sub_cmd.bash $arg1 $arg2

And then inside that command you pase the command-line arguments via $1, $2, etc.

  • Regarding external bash file, will it be much better to run it with nohup in the background, which in turn will run other scripts in the background? And if I have to give the backgound running bash file an argument later after it is running, how can I do that? Should I simply reference $1 and wait for it? – arjun Aug 7 '18 at 16:11
  • @arjun - it's difficult to say without knowing all the specifics regarding the background. It's def. an approach to look into taking though. WRT the arg after it's running, that's not really possible, except to pass it in through a file, perhaps. – slm Aug 7 '18 at 16:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.