X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/42ae3ec76c4b3c9d87af09e9dff5b2b9838f6954..816f3bfd2b6a562fc712b7c2b3eb30157a95cb7e:/services/boot/runit.go diff --git a/services/boot/runit.go b/services/boot/runit.go index e5bf520f00..a47db32a77 100644 --- a/services/boot/runit.go +++ b/services/boot/runit.go @@ -1,10 +1,9 @@ package main import ( + "bytes" "context" "fmt" - "io/ioutil" - "os" "path" ) @@ -18,29 +17,15 @@ func (r *runitService) Start(ctx context.Context) error { if err := installRunit.Boot(ctx); err != nil { return err } - svdir := r.svdir(ctx) - if err := os.MkdirAll(svdir, 0755); err != nil { - return err - } - tmp, err := ioutil.TempFile(svdir, "run~") - if err != nil { - return err - } - fmt.Fprintf(tmp, "#!/bin/sh\n\nexec %q", r.cmd) + + script := &bytes.Buffer{} + fmt.Fprintf(script, "#!/bin/sh\n\nexec %q", r.cmd) for _, arg := range r.args { - fmt.Fprintf(tmp, " %q", arg) + fmt.Fprintf(script, " %q", arg) } - fmt.Fprintf(tmp, " 2>&1\n") - tmp.Close() - if err := os.Chmod(tmp.Name(), 0755); err != nil { - os.Remove(tmp.Name()) - return err - } - if err := os.Rename(tmp.Name(), path.Join(svdir, "run")); err != nil { - os.Remove(tmp.Name()) - return err - } - return nil + fmt.Fprintf(script, " 2>&1\n") + + return atomicWriteFile(path.Join(r.svdir(ctx), "run"), script.Bytes(), 0755) } func (r *runitService) Running(ctx context.Context) (bool, error) {