Posts Script to start stop Jboss in background
Post
Cancel

Script to start stop Jboss in background

I use Linux Mint as my default OS.

I use jboss and apache for my development.

But I don’t enjoy using default start up and shut down scripts since their process gets attached to the terminal I used to start them.

I faced the same problem when running jboss in my virtualbox-vagrant powered virtual environment.

So I wrote this script to start and stop my server.

This script starts the process, and the process-id (pid) is not saved to a file, thus making it generic enough to be used to start and stop any process.

I have used a lot of variables to divide the commands into parts that are easy to understand.

  • Save The below script to a file with ‘.sh’ extension
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/sh
processName="services";
echoName="jboss services process";
processDetails="ps -ef | grep $processName";
totalRunningProcess=$(eval  $processDetails | wc -l);
usage="Usage : $0 start | stop";
processStartCommand="nohup /home/vaio/data/devenv/jboss-4.2.2.GA_3/bin/run.sh -b 0.0.0.0 -c $processName > /dev/null 2>&1 &";
commandToGetProcessPids="eval $processDetails | tr -s ' ' | cut -d ' ' -f 2";
if [ $# -lt 1 ]
then
  echo $usage;
fi
case "$1" in
"stop" )
 if [ $totalRunningProcess -eq "1" ]
 then
  echo "$echoName is not running....";
 
 else
  echo "stopping $echoName....";
  processToKill=$($commandToGetProcessPids);
  processToKillPidsArray=$(echo $processToKill);
  set -- $processToKillPidsArray;
  kill -9 $1 $2;
  echo "$echoName stopped....";
 fi
;;
"start" )
 if [ $totalRunningProcess -gt "1" ]
 then
  echo "$echoName is already running...."; 
 else
  echo "starting $echoName....";  
  eval $processStartCommand;
 fi
    ;;
*)
 echo $usage;
 ;;
esac
  • Make the script executable by using the below command
1
chmod u+x script.sh
  • Explanation

processName - this is the name of the process you want to kill.

echoName - this is the output that you want to show to the user.

processDetails - this command will get all the processes with the name that you want to kill.

Try executing:

1
$ ps -ef

This command will give you the list of all the running processes.

Now let’s assume you are running a java process.

1
$ ps -ef | grep java

This command will show you all the process name with java in it.

totalRunningProcess - this is to count total number pf processes.

You can do the same with

1
$ ps -ef | grep -c java

I wanted to reuse the variable so, I used word count (wc) with -l (count lines).

usage - this is to display to user how to use the program

processStartCommand - This contains the location of process that you want to start, here I have added these in the end.

  • /dev/null 2>&1 &

/dev/null this means to redirect the default output to null which never cares what it receives.

2>&1 this means to also redirect the error output to the same /dev/null

2 is for error output

> means to redirect

&1 is for first output that was /dev/null

& is to run this in background

commandToGetProcessPids - This command gets all the process running with the process name that I defined and then translates or delete characters with repeating sequence (here ‘ ‘).

Then the remaining text has been split using cut command parameters:

-f 2 is used to get the process ids

eval is used to execute the command.

to remove spaces from the text then provide the required section of the string.

This post is licensed under CC BY 4.0 by the author.