Author: markt Date: Thu Nov 2 13:10:04 2017 New Revision: 1814072 URL: http://svn.apache.org/viewvc?rev=1814072&view=rev Log: Fix DAEMON-334 Add a restarts options to jsvc to control the number of permitted restarts after a system crash. Patch provided by Brett Delle Grazie
Modified: commons/proper/daemon/trunk/src/changes/changes.xml commons/proper/daemon/trunk/src/native/unix/man/jsvc.1.xml commons/proper/daemon/trunk/src/native/unix/native/arguments.c commons/proper/daemon/trunk/src/native/unix/native/arguments.h commons/proper/daemon/trunk/src/native/unix/native/help.c commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c commons/proper/daemon/trunk/src/site/xdoc/jsvc.xml Modified: commons/proper/daemon/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/changes/changes.xml?rev=1814072&r1=1814071&r2=1814072&view=diff ============================================================================== --- commons/proper/daemon/trunk/src/changes/changes.xml (original) +++ commons/proper/daemon/trunk/src/changes/changes.xml Thu Nov 2 13:10:04 2017 @@ -130,6 +130,10 @@ <action issue="DAEMON-374" type="fix" dev="markt" due-to="Rashmi Ranjan Mohanty"> Add support for Java 9 commoand line arguments to jsvc. </action> + <action issue="DAEMON-334" type="add" dev="markt" due-to="Brett Delle Grazie"> + Add a restarts options to jsvc to control the number of permitted + restarts after a system crash. + </action> </release> </body> </document> Modified: commons/proper/daemon/trunk/src/native/unix/man/jsvc.1.xml URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/unix/man/jsvc.1.xml?rev=1814072&r1=1814071&r2=1814072&view=diff ============================================================================== --- commons/proper/daemon/trunk/src/native/unix/man/jsvc.1.xml (original) +++ commons/proper/daemon/trunk/src/native/unix/man/jsvc.1.xml Thu Nov 2 13:10:04 2017 @@ -47,6 +47,7 @@ <arg choice='opt'>-check</arg> <arg choice='opt'>-user <replaceable>user</replaceable></arg> <arg choice='opt'>-wait <replaceable>waittime</replaceable></arg> + <arg choice='opt'>-restarts <replaceable>max restart count</replaceable></arg> <arg choice='opt'>-umask <replaceable>mask</replaceable></arg> <arg choice='opt'>-stop</arg> <arg choice='opt'>-verbose<replaceable>:class|gc|jni</replaceable></arg> @@ -146,6 +147,14 @@ </para> </listitem> </varlistentry> + <varlistentry> + <term><option>-restarts</option> max restart count</term> + <listitem> + <para>maximum automatic restart count + -1=infinite (default), 0=none, 1..(INT_MAX-1)=fixed count + </para> + </listitem> + </varlistentry> <varlistentry> <term><option>-umask</option> mask</term> <listitem> Modified: commons/proper/daemon/trunk/src/native/unix/native/arguments.c URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/unix/native/arguments.c?rev=1814072&r1=1814071&r2=1814072&view=diff ============================================================================== --- commons/proper/daemon/trunk/src/native/unix/native/arguments.c (original) +++ commons/proper/daemon/trunk/src/native/unix/native/arguments.c Thu Nov 2 13:10:04 2017 @@ -158,6 +158,7 @@ static arg_data *parse(int argc, char *a args->chck = false; /* Don't do a check-only startup */ args->stop = false; /* Stop a running jsvc */ args->wait = 0; /* Wait until jsvc has started the JVM */ + args->restarts = -1; /* Infinite restarts by default */ args->install = false; /* Don't install as a service */ args->remove = false; /* Don't remove the installed service */ args->service = false; /* Don't run as a service */ @@ -274,6 +275,15 @@ static arg_data *parse(int argc, char *a return NULL; } } + else if (!strcmp(argv[x], "-restarts")) { + temp = optional(argc, argv, x++); + if (temp) + args->restarts = atoi(temp); + if (args->restarts < -1) { + log_error("Invalid max restarts [-1,0,...)"); + return NULL; + } + } else if (!strcmp(argv[x], "-umask")) { temp = optional(argc, argv, x++); if (temp == NULL) { @@ -488,6 +498,7 @@ arg_data *arguments(int argc, char *argv log_debug("| Check Only: %s", IsEnabledDisabled(args->chck)); log_debug("| Stop: %s", IsTrueFalse(args->stop)); log_debug("| Wait: %d", args->wait); + log_debug("| Restarts: %d", args->restarts); log_debug("| Run as service: %s", IsYesNo(args->service)); log_debug("| Install service: %s", IsYesNo(args->install)); log_debug("| Remove service: %s", IsYesNo(args->remove)); Modified: commons/proper/daemon/trunk/src/native/unix/native/arguments.h URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/unix/native/arguments.h?rev=1814072&r1=1814071&r2=1814072&view=diff ============================================================================== --- commons/proper/daemon/trunk/src/native/unix/native/arguments.h (original) +++ commons/proper/daemon/trunk/src/native/unix/native/arguments.h Thu Nov 2 13:10:04 2017 @@ -60,6 +60,8 @@ typedef struct { bool stop; /** number of seconds to until service started */ int wait; + /** max restarts **/ + int restarts; /** Install as a service (win32) */ bool install; /** Remove when installed as a service (win32) */ Modified: commons/proper/daemon/trunk/src/native/unix/native/help.c URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/unix/native/help.c?rev=1814072&r1=1814071&r2=1814072&view=diff ============================================================================== --- commons/proper/daemon/trunk/src/native/unix/native/help.c (original) +++ commons/proper/daemon/trunk/src/native/unix/native/help.c Thu Nov 2 13:10:04 2017 @@ -95,6 +95,9 @@ void help(home_data *data) printf(" -wait <waittime>\n"); printf(" wait waittime seconds for the service to start\n"); printf(" waittime should multiple of 10 (min=10)\n"); + printf(" -restarts <maxrestarts>\n"); + printf(" maximum automatic restarts (integer)\n"); + printf(" -1=infinite (default), 0=none, 1..(INT_MAX-1)=fixed restart count\n"); printf(" -stop\n"); printf(" stop the service using the file given in the -pidfile option\n"); printf(" -keepstdin\n"); Modified: commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c?rev=1814072&r1=1814071&r2=1814072&view=diff ============================================================================== --- commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c (original) +++ commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c Thu Nov 2 13:10:04 2017 @@ -126,9 +126,9 @@ static void handler(int sig) case SIGUSR1: log_debug("Caught SIGUSR1: Reopening logs"); doreopen = true; - break; + break; case SIGUSR2: - log_debug("Caught SIGUSR2: Scheduling a custom signal"); + log_debug("Caught SIGUSR2: Scheduling a custom signal"); dosignal = true; break; default: @@ -1262,6 +1262,7 @@ static int run_controller(arg_data *args gid_t gid) { pid_t pid = 0; + int restarts = 0; struct sigaction act; controller_pid = getpid(); @@ -1315,7 +1316,16 @@ static int run_controller(arg_data *args /* See java_abort123 (we use this return code to restart when the JVM aborts) */ if (!stopping) { if (status == 123) { + if (args->restarts == 0) { + log_debug("Service failure, restarts disabled"); + return 1; + } + if (args->restarts != -1 && args->restarts <= restarts) { + log_debug("Service failure, restart limit reached, aborting"); + return 1; + } log_debug("Reloading service"); + restarts++; /* prevent looping */ if (laststart + 60 > time(NULL)) { log_debug("Waiting 60 s to prevent looping"); @@ -1343,6 +1353,8 @@ static int run_controller(arg_data *args log_debug("Waiting 60 s to prevent looping"); sleep(60); } + /* Normal or user controlled termination, reset restart counter */ + restarts = 0; continue; } } Modified: commons/proper/daemon/trunk/src/site/xdoc/jsvc.xml URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/site/xdoc/jsvc.xml?rev=1814072&r1=1814071&r2=1814072&view=diff ============================================================================== --- commons/proper/daemon/trunk/src/site/xdoc/jsvc.xml (original) +++ commons/proper/daemon/trunk/src/site/xdoc/jsvc.xml Thu Nov 2 13:10:04 2017 @@ -181,11 +181,31 @@ Where options include: -wait <waittime> wait waittime seconds for the service to start waittime should multiple of 10 (min=10) + -restarts <maxrestarts> + maximum automatic restarts (integer) + -1=infinite (default), 0=none, 1..(INT_MAX-1)=fixed restart count -stop stop the service using the file given in the -pidfile option -keepstdin does not redirect stdin to /dev/null - + --add-modules=<module name> + Java 9 --add-modules option. Passed as it is to JVM + --module-path=<module path> + Java 9 --module-path option. Passed as it is to JVM + --upgrade-module-path=<module path> + Java 9 --upgrade-module-path option. Passed as it is to JVM + --add-reads=<module name> + Java 9 --add-reads option. Passed as it is to JVM + --add-exports=<module name> + Java 9 --add-exports option. Passed as it is to JVM + --add-opens=<module name> + Java 9 --add-opens option. Passed as it is to JVM + --limit-modules=<module name> + Java 9 --limit-modules option. Passed as it is to JVM + --patch-module=<module name> + Java 9 --patch-module option. Passed as it is to JVM + --illegal-access=<value> + Java 9 --illegal-access option. Passed as it is to JVM. Refer java help for possible values. </source> </p> <subsection name="Mac OS X universal binaries">