Question

I thought I could just use this related question: How Do I write a bash script to restart a process if it dies. @lhunath had a great answer and told me everything I might do about it was wrong, but I'm restarting a daemon process and if I'm hoping there's something I can do in a single script that works.

my process starts with a kick off script that shows the startup log, but then quits and leaves the process running off the shell:

>sudo ./start
R CMD Rserve --RS-conf /var/FastRWeb/code/rserve.conf --vanilla --no-save
...
Loading required package: FastRWeb
FastRWeb: TRUE
Loading data...
Rserv started in daemon mode.
>

The process is up and running,

ps -ale | grep Rserve 1 S 33 16534 1 0 80 0 - 60022 poll_s ? 00:00:00 Rserve

Is there a simple way to wrap or call the 'start' script from bash and restart when the process dies or is this a case where PID files are actually called for?

Dang - question got closed even after pointing to a very similar question that was not closed on stackoverflow. you guys suck

Was it helpful?

Solution

A very simple way to monitor the program is to use cron: check every minute (or so) if the program still is alive, ./start it otherwise.

As root, invoke crontab -e.

Append a line like this:

* * * * * if ! pidof Rserve 2>&1 >/dev/null; then /full/path/to/start; fi

This method will stay persistent, i.e., it will be executed after a reboot etc. If this is not what you want, move it to a shell script:

#! /bin/bash
# monitor.sh
while true; do
  if ! pidof Rserve 2>&1 >/dev/null; then /full/path/to/start; fi
  sleep 10
done

This script has to be started manually from the command line, and can be easily stopped with Ctrl-C.

OTHER TIPS

The easiest solution, if you can run the process is NON-daemon mode, is to wrap it in a script.

#!/bin/bash
while (true)
do
  xmessage "This is your process.  Click OK to kill and respawn"
done

Edit

Many deamons leave a lock file, usually in /var/lock, that contains their PID. This keeps multiple copies of the deamon from running.

Under Linux, it is fairly simple to look throgh /proc and see if that process is still around.

Under other platforms you may need to play games with ps to check for the processes existence.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top