in logs/kube-log-runner/kube-log-runner.go [45:93]
func configureAndRun() error {
var (
outputStream io.Writer = os.Stdout
errStream io.Writer = os.Stderr
)
args := flag.Args()
if len(args) == 0 {
return fmt.Errorf("not enough arguments to run")
}
if logFilePath != nil && *logFilePath != "" {
logFile, err := os.OpenFile(*logFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return fmt.Errorf("failed to create log file %v: %w", *logFilePath, err)
}
if *alsoToStdOut {
outputStream = io.MultiWriter(os.Stdout, logFile)
} else {
outputStream = logFile
}
}
if *redirectStderr {
errStream = outputStream
}
exe := args[0]
var exeArgs []string
if len(args) > 1 {
exeArgs = args[1:]
}
cmd := exec.Command(exe, exeArgs...)
cmd.Stdout = outputStream
cmd.Stderr = errStream
log.Printf("Running command:\n%v", cmdInfo(cmd))
err := cmd.Start()
if err != nil {
return fmt.Errorf("starting command: %w", err)
}
// Handle signals and shutdown process gracefully.
go setupSigHandler(cmd.Process)
if err := cmd.Wait(); err != nil {
return fmt.Errorf("running command: %w", err)
}
return nil
}