I always run linux applications manually using the terminal during the development stage. This has helped me immensely as I could see all the messages that were printed on to the linux console. I also had the habit of forgetting to start the Java program once the linux machine reboots. Well how many of you have had that experience? Ohh yes, I forgot to mention that I will be using a compiled java program as an example executable file for this tutorial.
Though this is acceptable for a system that is under development, it is not suitable to run an executable program using a terminal in production environment. So I would go about setting up a cron job to check if the process is running and start it up if it is not, using a shell script. This tutorial will give you an understanding of how to check for a running processes and start the process if not running using a shell script in linux.
Please note that shell script is not the only way to check for a running process or to start a process.
The Shell Script:
So let’s name the file testshellscript.sh
You can use any editor like vi to write shell script.
This is the first line of the shell script. It tells the script which interpreter to refer to. Next let us check for the running process
PROCESSFILE='ExecutableFile.jar'if ps ax | grep -v grep | grep $PROCESSFILE > /dev/null
I am assigning the jar file name to a variable named PROCESSFILE and then using the linux command ps to check if the process is running.
thenecho "$PROCESSFILE is running, everything is fine"elseecho "$PROCESSFILE is not running"#start the process/usr/local/jdk/bin/java -jar /opt/$PROCESSFILE > /dev/null 2>&1 &Fi
If there is a running process, we need not do anything to it. So I am simply echoing a message saying that the Java program is running. And if the Java program is not running, I will attempt to start the Java program. The logic of the conditional statement is as follows:
if process runningthendo nothingelsestart the process / java programend if
As the example executable file is a jar file I am using bin\java to execute the file. This is almost the same command used in a linux terminal. Only difference is the use of full paths. Also all the outputs are directed to the null device which is a special file that discards all data written to it.
Here is the complete code…
#!/bin/shPROCESSFILE='ExecutableFile.jar'if ps ax | grep -v grep | grep $PROCESSFILE > /dev/nullthenecho "$PROESSFILE is running, everything is fine"elseecho "$PROCESSFILE is not running"#start the process/usr/local/jdk/bin/java -jar /opt/$PROCESSFILE > /dev/null 2>&1 &Fi
Author: Shamly Faleel is a PMP certified IT Consultant, who has over 9 years overall experience in the IT Industry. Check out his blog at http://www.shamly.com/