dev privileges, db
[arvados.git] / services / boot / systemd.go
index e88ecc39dfd30197ddd5fa66af89677fc0ea95fa..18d123ea1a7a9d9c00dda6e396a290eb6e744c3c 100644 (file)
@@ -1,34 +1,19 @@
 package main
 
 import (
+       "context"
        "fmt"
-       "os"
        "os/exec"
 )
 
-type supervisor interface {
-       Check() (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
+       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)
@@ -36,10 +21,12 @@ func (u *systemdUnit) Start() error {
        return err
 }
 
-func (u *systemdUnit) Check() (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: