aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2018-07-27 14:17:00 +0200
committerGitHub <noreply@github.com>2018-07-27 14:17:00 +0200
commit7e6b0646c8567dfdd7b89295f9c288dce01f8d6f (patch)
treef3654e304d135f9e816d7edd6bcc5fdb4e9edf59
parentaf24d520b4fb3f85bcbce9db4cf1798e097d84e8 (diff)
parent42865b4d2fe3651b2e21308bb0e5995785b4fedf (diff)
Merge pull request #6486 from vespa-engine/arnej/splunk-start-options
add more "just do it" option to splunk start
-rw-r--r--logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp29
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 6ed209cbe5b..0588ce5d2e7 100644
--- a/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp
+++ b/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp
@@ -6,6 +6,8 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <vector>
+#include <string>
#include <vespa/log/log.h>
LOG_SETUP(".child-handler");
@@ -15,13 +17,18 @@ ChildHandler::ChildHandler() : _childRunning(false) {}
namespace {
void
-runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0)
+runSplunk(const vespalib::string &prefix, std::vector<const char *> args)
{
- const char *argv[] = { 0, a1, a2, 0 };
vespalib::string path = prefix + "/bin/splunk";
- argv[0] = path.c_str();
- LOG(debug, "starting splunk forwarder with command: '%s' '%s' '%s'",
- argv[0], argv[1], argv[2]);
+ args.insert(args.begin(), path.c_str());
+ std::string dbg = "";
+ for (const char *arg : args) {
+ dbg.append(" '");
+ dbg.append(arg);
+ dbg.append("'");
+ }
+ LOG(debug, "starting splunk forwarder with command: %s", dbg.c_str());
+ args.push_back(nullptr);
fflush(stdout);
pid_t child = fork();
if (child == -1) {
@@ -33,10 +40,10 @@ runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0)
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);
+ char **cargv = const_cast<char **>(args.data()); // safe cast
+ execv(cargv[0], cargv);
// if execv fails:
- perror(argv[0]);
+ perror(cargv[0]);
exit(1);
}
LOG(debug, "child running with pid %d", (int)child);
@@ -69,19 +76,19 @@ void
ChildHandler::startChild(const vespalib::string &prefix)
{
if (! _childRunning) {
- runSplunk(prefix, "start", "--accept-license");
+ runSplunk(prefix, {"start", "--answer-yes", "--no-prompt", "--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");
+ runSplunk(prefix, {"restart"});
}
void
ChildHandler::stopChild(const vespalib::string &prefix)
{
- runSplunk(prefix, "stop");
+ runSplunk(prefix, {"stop"});
_childRunning = false;
}