Administrators Leon Posted August 16, 2012 Administrators Share Posted August 16, 2012 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. Requirements: Any modern Linux or OSX 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 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 Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now