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