Setting up a shell script to check if a process is
Author Message
Posted : Mon, 04 August 2008 22:07:37
Subject : Setting up a shell script to check if a process is
Hi, I am trying to write a simple shell script to run on a cron schedule to ensure that a given process is running and then to take an action based on that result. In this case I am attempting to look at /sbin/pidof to see if a valid value is present for a given process. I'm not sure if this is the best way to accomplish this so I'm open to other suggestions... I have the following in a shell script: if [ -z "/usr/sbin/pidof ntop" ] ; then echo "ntop is no longer running" else echo "ntop is running and nothing needs to be done" fi The -z is in place assuming that the command /usr/sbin/pidof ntop comes back as a null value (which I'm assuming it should if ntop is not actually running). This is obviously very simple at this stage and I will change it to send an email and restart the service if ntop has stopped running but first I'd like to figure out why this doesn't work. Thanks!
chart3399
Posted : Mon, 04 August 2008 22:23:19
Subject : Re: Setting up a shell script to check if a process is
What you are looking to do is pretty simple. There is nothing wrong with doing it your way. I would do it a little differently but it is more up to style. What I typically try to do with all my scripts is think long term. Today you want to monitor ntop so hard coding ntop into the script isn't bad but it isn't very extensible either. Lets say tomorrow you want to monitor ntop and process foo? You see where I am going with this. I typically work with exit values so I would have written this basic script as: #!/bin/sh /usr/sbin/pidof ntop > /dev/null 2&>1 if [ $? -gt 0 ] ; then echo "We got a problem" fi If you want to impress your friends #!/bin/sh /usr/sbin/pidof ntop > /dev/null 2>&1 || echo "We got a problem"
AdrianTM
Posted : Sun, 17 August 2008 16:22:35
Subject : Re: Setting up a shell script to check if a process is
I would use the name of the process since you want to find out if there's at least one instance running. For example to check if sshd runs and if it doesn't to start it, use something like this: ps -C sshd || "here goes the command to start sshd" on my system it looks like this: ps -C sshd || service ssh restart [Modified by: AdrianTM on August 17, 2008 04:23 PM]
Fabio Berbert de Paula
Posted : Mon, 01 September 2008 21:53:24
Subject : Setting up a shell script to check if a process is
I have an alternative solution that works fine for me! It is based on the output off "ps" command. It works in looping and check the proccess every 5 seconds. Here we go (sample for apache2): --- #!/bin/sh CMDNAME='apache2' RESTARTCMD='sudo /etc/init.d/apache2 restart' SLEEPTIME=5 while test 1 do OUTPUT=`ps ax | grep $CMDNAME | grep -v grep` if ! echo $OUTPUT | grep $CMDNAME 1>/dev/null ; then echo Restarting service... $RESTARTCMD fi sleep $SLEEPTIME done --- Fabio Berbert de Paula http://www.vivaolinux.com.br/
Johannes Truschnigg
Posted : Wed, 03 September 2008 14:54:52
Subject : Setting up a shell script to check if a process is
If you're using a GNU/Linux based system with the procps tools installed (I don't think there is a non-embedded distro out there which hasn't), you you `pgrep` and `pkill` at hand. Read their manpages, and tap their power for your cause ;-)