StvnBrkdll
StvnBrkdll

Reputation: 4044

inittab not restarting service after service crash in Red Hat 6.7

NOTE: I am running Red Hat 6.7

I have a service that is configured with the Linux init system to start a process as a service when the machine boots. This was done by doing this one-time configuration from the command line:

ln -snf /home/me/bin/my_service /etc/init.d/my_service
chkconfig --add my_service
chkconfig --level 235 my_service on

When the OS reboots, the service starts as expected.

I ALSO need the service to be restarted if the service (my_service) crashes. From what I've read, all I need to do is add an entry to /etc/inittab that looks like this:

mysvc:235:respawn:/home/me/bin/my_service_starter

Where my_service_starter looks like:

#!/bin/bash
/home/me/bin/my_service start

My understanding is that when the init system detects that my_service is not running, it will attempt to restart it by running "my_service_starter".

However this does not seem to be working.

I need to understand how to tell the Linux init system to restart my service when the service crashes.

Upvotes: 0

Views: 1488

Answers (2)

larsks
larsks

Reputation: 312148

Given an entry like:

mysvc:235:respawn:/home/me/bin/my_service_starter

Then inittab will:

  1. call /home/me/bin/my_service_starter
  2. which will call /home/me/bin/my_service start
  3. ...and then exit, so init will thing your service has failed
  4. so init will call /home/me/bin/my_service_starter again

...and so forth, which will result in init deciding that your script is respawning too fast, after which it will ignore it completely.

A process started by inittab is not expected to exit. If you really want to use inittab to maintain your service, you could remove /etc/init.d/my_service, and then in /etc/inittab you would have something like:

mysvc:235:respawn:/home/me/bin/my_service

And you would need to ensure that my_service runs in the foreground (some programs automatically daemonize by default, although these will often have some sort of --run-in-foreground flag).

If you upgrade to CentOS 7 or something else with systemd, this all becomes easier.

You can also investigate "third-party" process supervisors like "supervisord" or "runit" that you could use for process monitoring/restarting on CentOS 6.

Update

As mangotang points out, and I forgot, RHEL 6 actually shipped with upstart, even though it used almost exclusively SysV-style init scripts. So a better solution would be to create an upstart service instead. There are some reasonable getting-started docs here.

Upvotes: 2

StvnBrkdll
StvnBrkdll

Reputation: 4044

On RHEL 6.X, at top of the /etc/inittab file it says:

# inittab is only used by upstart for the default runlevel. 
# 
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM

RHEL 6.X uses Upstart instead of the System V init system. See the man pages for initctl(8) and initctl(5), or ask Google about Upstart.

Upvotes: 1

Related Questions