cron job to start a service?

Posted on 2013-07-01
Last Modified: 2013-07-03
Hello, I am looking for a cron job script that can run every 1 minute to check if  a service is running on my linux box. If the service is running the script does nothing but if the service is not running the script should activate another script to start the service? Can someone help me with this? Thank you.
Question by:aej1973
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
  • +2
LVL 14

Expert Comment

ID: 39292007
My first suggestion is to fix whatever is causing your service to stop running. Services are designed to be running all the time. Instead of merely restarting the service, it would be better to fix the underlying problem.

However, the following script answers your question:

if [ "`/bin/ps -ef | grep "your_script_name" | grep -v "grep"`" = "" ]; then
  echo NOT Running!

Since cron jobs are 1-liners, change each statement line to end with a semicolon, and remove the hard returns to get this cron entry:

if [ "`/bin/ps -ef | grep "your_script_name" | grep -v "grep"`" = "" ]; then  echo NOT Running!; fi

Obviously, you will need to change your_script_name and replace the echo statement with the command to start services for your distro (the command is different for different distros.)
LVL 48

Expert Comment

ID: 39292027
You should look into defining an /etc/inittab entry for the service.

Author Comment

ID: 39292030
Tintin, how do I do that?
On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

LVL 48

Expert Comment

ID: 39292054
Assuming /etc/inittab exists on your system (not installed by default on some Linux distros), add an entry like:



zz is a 2 character reference (you can make this anything unique)
3 is the run level the entry is valid for
respawn means restart the command if it dies


init q

will force the init process to reexamine /etc/initab to pick up the new entry.

Note that using this process won't give you any control as to manually stopping/starting the daemon, which may, or may not be important to you.
LVL 40

Assisted Solution

omarfarid earned 100 total points
ID: 39292119
the solution given by tintin is good but if /path/to/service is a script that run another process and exit then it may not work.

what you could do is:

- run the monitoring script as an inittab entry as given by tintin, and let the script loop:

while true
   grep processname | grep -v grep
   if [ $? -ne 0 ]
       put your command to restart the process
   sleep 60
LVL 27

Accepted Solution

skullnobrains earned 400 total points
ID: 39292166
ps -p `cat /var/run/` >/dev/null || /etc/rc.d/service_name start

you'll get an email everytime the service is started

if you're using an os where services provide status commands, you can use that instead of looking for a pid. on linux, you usually do not have status, but your rc scripts use startstopcmd that can be queried for the status


if you're not really monitoring a service an want a pseudo-daemon, try this

flock -w 60 /var/run/mylock.lock -c "YOUR COMMAND HERE"

this command will restart the process as soon as it dies at most once per minute. if you want it to work more than once per minute, you can use more than 60 for the wait time


or a combination

flock -w 60 /tmp/mylock.lock -c "while sleep 0.1 ; do ! ps -p 11565 >/dev/null && echo restarting myservice && RESTART COMMAND && break ; done"

this will restart the given process at most once per minute, send a warning email when it does. make sure whatever script you use does not provide output when it does not restart anything or cron will have to store that output

Author Comment

ID: 39294097
skullnobrains, so if I run this cron job every 5 minutes this is how it is going to look?

*/5 * * * * ps -p `cat /var/run/` >/dev/null || /etc/rc.d/service_name start

Thank you,

Author Comment

ID: 39294100
Also, how do I check to make sure my cron is running every 5  mins?
LVL 27

Expert Comment

ID: 39296809
yes it would look like this.
check that the path is set properly or use the complet path to ps (likely /bin/ps)

if cron runs, it will run.

you can stop the sevice and wait. pretty much tests the whole thing.

cron should also send you a mail when there is output, so you'll receive a mail each time with the output (ie when it does restart the service). you can remove the redirection into /dev/null if you want a mail every time

you can also add some logging to it. try something like this

*/5 * * * * date >>/var/log/myservice.mon.log ; ps -p `cat /var/run/` >>/var/log/myservice.mon.log || /etc/rc.d/service_name start 2>&1 >>/var/log/myservice.mon.log

if your monitoring script becomes too complicated to be a one-liner, you had better stick it in a file and run the file from cron

Author Closing Comment

ID: 39296854
Thank you.

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This Windows batch file is useful for organizing image files from a digital camera or other source, but can have many other uses.  It simply renames the file(s) to match their create date.  For example, if you took a picture today at 1:40pm and the …
The following is a collection of cases for strange behaviour when using advanced techniques in DOS batch files. You should have some basic experience in batch "programming", as I'm assuming some knowledge and not further explain the basics. For some…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
In a recent question ( here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

717 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question