package main
import (
+ "context"
"fmt"
- "os"
"os/exec"
)
-type supervisor interface {
- Running() (bool, error)
- Start() error
-}
-
-func newSupervisor(name, cmd string, args ...string) supervisor {
- return &systemdUnit{
- name: name,
- cmd: cmd,
- args: args,
- }
-}
-
type systemdUnit struct {
name string
cmd string
args []string
}
-func (u *systemdUnit) Start() error {
- cmd := exec.Command("systemd-run", append([]string{"--unit=arvados-" + u.name, u.cmd}, u.args...)...)
- cmd.Stdout = os.Stderr
- cmd.Stderr = os.Stderr
+func (u *systemdUnit) Start(ctx context.Context) error {
+ cmd := command("systemd-run", append([]string{"--unit=arvados-" + u.name, u.cmd}, u.args...)...)
err := cmd.Run()
if err != nil {
err = fmt.Errorf("systemd-run: %s", err)
return err
}
-func (u *systemdUnit) Running() (bool, error) {
- cmd := exec.Command("systemctl", "status", "arvados-"+u.name)
- cmd.Stdout = os.Stderr
- cmd.Stderr = os.Stderr
+func (u *systemdUnit) Running(ctx context.Context) (bool, error) {
+ return runStatusCmd("systemctl", "status", "arvados-"+u.name)
+}
+
+func runStatusCmd(prog string, args ...string) (bool, error) {
+ cmd := command(prog, args...)
err := cmd.Run()
switch err.(type) {
case *exec.ExitError: