diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2017-10-13 10:30:00 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2017-10-13 13:17:05 +0000 |
commit | f54a1254b36a02d909ed7c59605d8ea317a05218 (patch) | |
tree | 038fdfb43c23c87f5391c15c586ed443409f0f44 | |
parent | 141768384af166828c96193d9bd09187f08272a7 (diff) |
always do restart
* for the case where splunk was started earlier
* also do debug logging
-rw-r--r-- | logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp b/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp index d7c7a923ddb..6abf807ec8b 100644 --- a/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp +++ b/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp @@ -20,8 +20,9 @@ runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0) const char *argv[] = { 0, a1, a2, 0 }; vespalib::string path = prefix + "/bin/splunk"; argv[0] = path.c_str(); - fprintf(stdout, "starting splunk forwarder with command: '%s' '%s'\n", - argv[0], argv[1]); + LOG(debug, "starting splunk forwarder with command: '%s' '%s' '%s'", + argv[0], argv[1], argv[2]); + fflush(stdout); pid_t child = fork(); if (child == -1) { perror("fork()"); @@ -31,12 +32,14 @@ runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0) vespalib::string env = "SPLUNK_HOME=" + prefix; char *cenv = const_cast<char *>(env.c_str()); // safe cast putenv(cenv); + LOG(debug, "added to environment: '%s'", cenv); char **cargv = const_cast<char **>(argv); // safe cast execv(argv[0], cargv); // if execv fails: perror(argv[0]); exit(1); } + LOG(debug, "child running with pid %d", (int)child); int waitStatus = 0; if (waitpid(child, &waitStatus, 0) == -1) { perror("waitpid()"); @@ -44,17 +47,18 @@ runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0) } if (WIFEXITED(waitStatus) && WEXITSTATUS(waitStatus) == 0) { // all OK + LOG(debug, "child ran ok, exit status 0"); return; } if (WIFEXITED(waitStatus)) { - fprintf(stderr, "failed starting splunk forwarder (exit status %d)\n", - WEXITSTATUS(waitStatus)); + LOG(warning, "failed starting splunk forwarder (exit status %d)", + WEXITSTATUS(waitStatus)); } else if (WIFSIGNALED(waitStatus)) { - fprintf(stderr, "failed starting splunk forwarder (exit on signal %d)\n", - WTERMSIG(waitStatus)); + LOG(warning, "failed starting splunk forwarder (exit on signal %d)", + WTERMSIG(waitStatus)); } else { - fprintf(stderr, "failed starting splunk forwarder (abnormal exit status %d)\n", - waitStatus); + LOG(warning, "failed starting splunk forwarder (abnormal exit status %d)", + waitStatus); } } @@ -64,10 +68,13 @@ runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0) void ChildHandler::startChild(const vespalib::string &prefix) { - if (_childRunning) { - runSplunk(prefix, "restart"); - } else { + if (! _childRunning) { runSplunk(prefix, "start", "--accept-license"); _childRunning = true; + // it is possible that splunk was already running, and + // then the above won't do anything, so we need to + // *also* do the restart below, after a small delay. + sleep(1); } + runSplunk(prefix, "restart"); } |