Free, tested & ready to use examples : bash shell check running program
AnyExample.com
 
Webanyexample.com
 

Check if program is running with bash shell script

abstract 
This is an example of a bash script which checks for some running process (daemon or service) and does specific actions (reload, sends mail) if there is no such process running.
compatible 
  • Any modern Linux distribution
  • Nearly any unix sistem with recent bash version, grep, ps

We call ps (process list) command to list every system process and then use grep(filter) command to check if our process name is in that list, for example:

$ ps ax | grep httpd 
ps ax|grep httpd
  592  ??  Ss     8:22.25 /usr/local/apache/bin/httpd
 3706  ??  I      0:58.06 /usr/local/apache/bin/httpd
 3707  ??  I      0:40.12 /usr/local/apache/bin/httpd
 3708  ??  I      0:49.56 /usr/local/apache/bin/httpd
 3709  ??  I      1:02.86 /usr/local/apache/bin/httpd
 3710  ??  I      1:12.26 /usr/local/apache/bin/httpd
 3711  ??  I      1:20.03 /usr/local/apache/bin/httpd
 3712  ??  I      0:48.79 /usr/local/apache/bin/httpd
 3714  ??  I      1:01.60 /usr/local/apache/bin/httpd
 3715  ??  I      0:58.91 /usr/local/apache/bin/httpd
 3716  ??  I      0:42.88 /usr/local/apache/bin/httpd
28363  p3  S+     0:00.01 grep httpd			

But if there is no such process, grep (filter) command will match itself, because command argument has exactly same string which is searched for:

$ ps ax|grep nosuchprocess
28372  p3  S+     0:00.01 grep nosuchprocess

So, we have to add additional 'grep -v grep' filter that will remove process which command line contains 'grep' i.e. grep itself.

Here is a script wich checks if SERVICE (variable at the beginning of script which contains service name) is running, and if it's not running, mails warning message to root:

source code: bash script
#!/bin/sh
SERVICE='httpd'

if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
    echo "$SERVICE service running, everything is fine"
else
    echo "$SERVICE is not running"
    echo "$SERVICE is not running!" | mail -s "$SERVICE down" root
fi

warning 
  • If you process name is too short and is substring of some other process command line, suggested approach could fail (for example, you checking for 'testd' process, but have running 'testdoo-doo-doo" which will result false positive)
  • Though, highly unlikely, but if your process name will begin with 'grep', suggested approach could fail
tested by AnyExample.com on 2006-09-11
  • FreeBSD 5.2 :: GNU bash 2.05b.0, GNU grep 2.4d
  • CentOS Linux 4.0
 


 
© AnyExample 2007
License | Privacy | Contact