diff options
Diffstat (limited to 'logforwarder/src')
-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"); } |