diff options
author | William Hubbs <w.d.hubbs@gmail.com> | 2018-11-30 18:07:16 -0600 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2018-12-02 18:33:25 -0600 |
commit | ebf79db79eaa2df0ceb62b4edbef94e68a28b612 (patch) | |
tree | d5c8ebfdca7edae129bf4d0daa9d530a8dcf455d /src/rc | |
parent | 1b5a3b4ef4b2c3e20cfe4a71cf38c63279ed42d2 (diff) |
supervise-daemon: mark a service failed if it respawns too many times
Diffstat (limited to 'src/rc')
-rw-r--r-- | src/rc/supervise-daemon.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/rc/supervise-daemon.c b/src/rc/supervise-daemon.c index d93d31f8..c2082100 100644 --- a/src/rc/supervise-daemon.c +++ b/src/rc/supervise-daemon.c @@ -446,6 +446,7 @@ static void supervisor(char *exec, char **argv) char buf[2048]; char cmd[2048]; int count; + int failing; int health_status; int healthcheck_respawn; int i; @@ -498,6 +499,7 @@ static void supervisor(char *exec, char **argv) else if (healthchecktimer) alarm(healthchecktimer); fifo_fd = open(fifopath, O_RDONLY |O_NONBLOCK); + failing = 0; while (!exiting) { healthcheck_respawn = 0; wait_pid = waitpid(child_pid, &i, WNOHANG); @@ -576,6 +578,7 @@ static void supervisor(char *exec, char **argv) syslog(LOG_WARNING, "respawned \"%s\" too many times, exiting", exec); exiting = 1; + failing = 1; continue; } ts.tv_sec = respawn_delay; @@ -602,16 +605,18 @@ static void supervisor(char *exec, char **argv) } } - if (pidfile && exists(pidfile)) - unlink(pidfile); - if (fifopath && exists(fifopath)) - unlink(fifopath); if (svcname) { rc_service_daemon_set(svcname, exec, (const char *const *)argv, pidfile, false); - rc_service_mark(svcname, RC_SERVICE_STOPPED); rc_service_value_set(svcname, "child_pid", NULL); + rc_service_mark(svcname, RC_SERVICE_STOPPED); + if (failing) + rc_service_mark(svcname, RC_SERVICE_FAILED); } + if (pidfile && exists(pidfile)) + unlink(pidfile); + if (fifopath && exists(fifopath)) + unlink(fifopath); exit(EXIT_SUCCESS); } |