X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/ba9b709bfed45aad249b3aa0a69de9b0f9eb9861..df5c912a9eb5af7222e5446bc437ee97262542c8:/services/crunch-run/crunchrun.go diff --git a/services/crunch-run/crunchrun.go b/services/crunch-run/crunchrun.go index e5a1b94706..1c6c58009f 100644 --- a/services/crunch-run/crunchrun.go +++ b/services/crunch-run/crunchrun.go @@ -1732,6 +1732,10 @@ func main() { cgroupParent := flag.String("cgroup-parent", "docker", "name of container's parent cgroup (ignored if -cgroup-parent-subsystem is used)") cgroupParentSubsystem := flag.String("cgroup-parent-subsystem", "", "use current cgroup for given subsystem as parent cgroup for container") caCertsPath := flag.String("ca-certs", "", "Path to TLS root certificates") + detach := flag.Bool("detach", false, "Detach from parent process and run in the background") + sleep := flag.Duration("sleep", 0, "Delay before starting (testing use only)") + kill := flag.Int("kill", -1, "Send signal to an existing crunch-run process for given UUID") + list := flag.Bool("list", false, "List UUIDs of existing crunch-run processes") enableNetwork := flag.String("container-enable-networking", "default", `Specify if networking should be enabled for container. One of 'default', 'always': default: only enable networking if container requests it. @@ -1743,8 +1747,30 @@ func main() { memprofile := flag.String("memprofile", "", "write memory profile to `file` after running container") getVersion := flag.Bool("version", false, "Print version information and exit.") flag.Duration("check-containerd", 0, "Ignored. Exists for compatibility with older versions.") + + detached := false + if len(os.Args) > 1 && os.Args[1] == "-detached" { + // This process was invoked by a parent process, which + // has passed along its own arguments, including + // -detach, after the leading -detached flag. Strip + // the leading -detached flag (it's not recognized by + // flag.Parse()) ... and remember not to detach all + // over again in this process. + os.Args = append([]string{os.Args[0]}, os.Args[2:]...) + detached = true + } + flag.Parse() + switch { + case *detach && !detached: + os.Exit(Detach(flag.Arg(0), os.Args, os.Stdout, os.Stderr)) + case *kill >= 0: + os.Exit(KillProcess(flag.Arg(0), syscall.Signal(*kill), os.Stdout, os.Stderr)) + case *list: + os.Exit(ListProcesses(os.Stdout, os.Stderr)) + } + // Print version information if requested if *getVersion { fmt.Printf("crunch-run %s\n", version) @@ -1752,6 +1778,7 @@ func main() { } log.Printf("crunch-run %s started", version) + time.Sleep(*sleep) containerId := flag.Arg(0)