diff options
| author | William Hubbs <w.d.hubbs@gmail.com> | 2018-11-30 17:10:47 -0600 | 
|---|---|---|
| committer | William Hubbs <w.d.hubbs@gmail.com> | 2018-12-02 18:33:25 -0600 | 
| commit | 1b5a3b4ef4b2c3e20cfe4a71cf38c63279ed42d2 (patch) | |
| tree | 067329cc2915f24e8470a52c24d2afdec8b3b383 | |
| parent | 77262c359c4aaf15ba00b07cd51f3987ce514769 (diff) | |
| download | openrc-1b5a3b4ef4b2c3e20cfe4a71cf38c63279ed42d2.tar.xz | |
supervise-daemon: make respawn-max and respawn-period independent settings
| -rw-r--r-- | man/supervise-daemon.8 | 15 | ||||
| -rw-r--r-- | src/rc/supervise-daemon.c | 34 | 
2 files changed, 25 insertions, 24 deletions
| diff --git a/man/supervise-daemon.8 b/man/supervise-daemon.8 index 1bf19de0..789c6867 100644 --- a/man/supervise-daemon.8 +++ b/man/supervise-daemon.8 @@ -107,16 +107,19 @@ Data can be from 0 to 7 inclusive.  .It Fl k , -umask Ar mode  Set the umask of the daemon.  .It Fl m , -respawn-max Ar count -Sets the maximum number of times a daemon will be respawned during a -respawn period. If a daemon dies more than this number of times during a -respawn period, +Sets the maximum number of times a daemon will be respawned. If a daemon +crashes more than this number of times,  .Nm -will give up trying to respawn it and exit. The default is 10, and 0 -means unlimited. +will give up and exit. The default is 10 and 0 means unlimited. +.Pp +If respawn-period is also set, more than respawn-max crashes must occur +during respawn-period seconds to cause +.Nm +to give up and exit.  .It Fl N , -nicelevel Ar level  Modifies the scheduling priority of the daemon.  .It Fl P , -respawn-period Ar seconds -Sets the length of a respawn period. The default is 10 seconds. See the +Sets the length of a respawn period. See the  description of --respawn-max for more information.  .It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout  The retry specification can be either a timeout in seconds or multiple diff --git a/src/rc/supervise-daemon.c b/src/rc/supervise-daemon.c index bfbb85f6..d93d31f8 100644 --- a/src/rc/supervise-daemon.c +++ b/src/rc/supervise-daemon.c @@ -143,7 +143,7 @@ static pid_t child_pid;  static int respawn_count = 0;  static int respawn_delay = 0;  static int respawn_max = 10; -static int respawn_period = 5; +static int respawn_period = 0;  static char *fifopath = NULL;  static int fifo_fd = 0;  static char *pidfile = NULL; @@ -563,23 +563,21 @@ static void supervisor(char *exec, char **argv)  			do_healthcheck = 0;  			healthcheck_respawn = 0;  			alarm(0); -			if (respawn_max > 0 && respawn_period > 0) { -				respawn_now = time(NULL); -				if (first_spawn == 0) -					first_spawn = respawn_now; -				if (respawn_now - first_spawn > respawn_period) { -					respawn_count = 0; -					first_spawn = 0; -				} else -					respawn_count++; -				if (respawn_count > respawn_max) { -					syslog(LOG_WARNING, -							"respawned \"%s\" too many times, exiting", exec); -					exiting = 1; -					continue; -				} +			respawn_now = time(NULL); +			if (first_spawn == 0) +				first_spawn = respawn_now; +			if ((respawn_period > 0) +					&& (respawn_now - first_spawn > respawn_period)) { +				respawn_count = 0; +				first_spawn = 0; +			} else +				respawn_count++; +			if (respawn_max > 0 && respawn_count > respawn_max) { +				syslog(LOG_WARNING, "respawned \"%s\" too many times, exiting", +						exec); +				exiting = 1; +				continue;  			} -			alarm(0);  			ts.tv_sec = respawn_delay;  			ts.tv_nsec = 0;  			nanosleep(&ts, NULL); @@ -930,7 +928,7 @@ int main(int argc, char **argv)  						0, false, true) > 0)  				eerrorx("%s: %s is already running", applet, exec); -		if (respawn_delay * respawn_max > respawn_period) +		if (respawn_period > 0 && respawn_delay * respawn_max > respawn_period)  			ewarn("%s: Please increase the value of --respawn-period to more "  				"than %d to avoid infinite respawning", applet,  				respawn_delay * respawn_max); | 
