add gateway (part)
[arvados.git] / services / boot / runit.go
1 package main
2
3 import (
4         "bytes"
5         "context"
6         "fmt"
7         "path"
8 )
9
10 type runitService struct {
11         name string
12         cmd  string
13         args []string
14 }
15
16 func (r *runitService) Start(ctx context.Context) error {
17         if err := installRunit.Boot(ctx); err != nil {
18                 return err
19         }
20
21         script := &bytes.Buffer{}
22         fmt.Fprintf(script, "#!/bin/sh\n\nexec %q", r.cmd)
23         for _, arg := range r.args {
24                 fmt.Fprintf(script, " %q", arg)
25         }
26         fmt.Fprintf(script, " 2>&1\n")
27
28         return atomicWriteFile(path.Join(r.svdir(ctx), "run"), script.Bytes(), 0755)
29 }
30
31 func (r *runitService) Running(ctx context.Context) (bool, error) {
32         if err := installRunit.Boot(ctx); err != nil {
33                 return false, err
34         }
35         return runStatusCmd("sv", "stat", r.svdir(ctx))
36 }
37
38 func (r *runitService) svdir(ctx context.Context) string {
39         return path.Join(cfg(ctx).RunitSvDir, r.name)
40 }