From c9d744865104a41bb3b86739587a454ed0174e9f Mon Sep 17 00:00:00 2001 From: Yo Takezawa Date: Mon, 31 Aug 2015 14:33:47 +0900 Subject: [PATCH 1/2] Add dependencies option --- daemon.go | 4 ++-- daemon_darwin.go | 9 +++++---- daemon_linux.go | 6 +++--- daemon_linux_systemd.go | 12 ++++++++---- daemon_linux_systemv.go | 5 +++-- daemon_windows.go | 9 +++++---- 6 files changed, 26 insertions(+), 19 deletions(-) diff --git a/daemon.go b/daemon.go index 823517e..40eeae5 100644 --- a/daemon.go +++ b/daemon.go @@ -177,6 +177,6 @@ type Daemon interface { // // name: name of the service // description: any explanation, what is the service, its purpose -func New(name, description string) (Daemon, error) { - return newDaemon(strings.Join(strings.Fields(name), "_"), description) +func New(name, description string, dependencies []string) (Daemon, error) { + return newDaemon(strings.Join(strings.Fields(name), "_"), description, dependencies) } diff --git a/daemon_darwin.go b/daemon_darwin.go index 631b5a6..99c690c 100644 --- a/daemon_darwin.go +++ b/daemon_darwin.go @@ -16,13 +16,14 @@ import ( // darwinRecord - standard record (struct) for darwin version of daemon package type darwinRecord struct { - name string - description string + name string + description string + dependencies []string } -func newDaemon(name, description string) (Daemon, error) { +func newDaemon(name, description string, dependencies []string) (Daemon, error) { - return &darwinRecord{name, description}, nil + return &darwinRecord{name, description, dependencies}, nil } // Standard service path for system daemons diff --git a/daemon_linux.go b/daemon_linux.go index 710358a..affc0b4 100644 --- a/daemon_linux.go +++ b/daemon_linux.go @@ -10,11 +10,11 @@ import ( ) // Get the daemon properly -func newDaemon(name, description string) (Daemon, error) { +func newDaemon(name, description string, dependencies []string) (Daemon, error) { if _, err := os.Stat("/run/systemd/system"); err == nil { - return &systemDRecord{name, description}, nil + return &systemDRecord{name, description, dependencies}, nil } - return &systemVRecord{name, description}, nil + return &systemVRecord{name, description, dependencies}, nil } // Get executable path diff --git a/daemon_linux_systemd.go b/daemon_linux_systemd.go index 46a4c77..7968973 100644 --- a/daemon_linux_systemd.go +++ b/daemon_linux_systemd.go @@ -9,13 +9,15 @@ import ( "os" "os/exec" "regexp" + "strings" "text/template" ) // systemDRecord - standard record (struct) for linux systemD version of daemon package type systemDRecord struct { - name string - description string + name string + description string + dependencies []string } // Standard service path for systemD daemons @@ -83,8 +85,8 @@ func (linux *systemDRecord) Install() (string, error) { if err := templ.Execute( file, &struct { - Name, Description, Path string - }{linux.name, linux.description, execPatch}, + Name, Description, Dependencies, Path string + }{linux.name, linux.description, strings.Join(linux.dependencies, " "), execPatch}, ); err != nil { return installAction + failed, err } @@ -187,6 +189,8 @@ func (linux *systemDRecord) Status() (string, error) { var systemDConfig = `[Unit] Description={{.Description}} +Requires={{.Dependencies}} +After={{.Dependencies}} [Service] PIDFile=/var/run/{{.Name}}.pid diff --git a/daemon_linux_systemv.go b/daemon_linux_systemv.go index 1aed0a7..c8a8f82 100644 --- a/daemon_linux_systemv.go +++ b/daemon_linux_systemv.go @@ -14,8 +14,9 @@ import ( // systemVRecord - standard record (struct) for linux systemV version of daemon package type systemVRecord struct { - name string - description string + name string + description string + dependencies []string } // Standard service path for systemV daemons diff --git a/daemon_windows.go b/daemon_windows.go index 0567f19..467a21b 100644 --- a/daemon_windows.go +++ b/daemon_windows.go @@ -11,13 +11,14 @@ import ( // windowsRecord - standard record (struct) for windows version of daemon package type windowsRecord struct { - name string - description string + name string + description string + dependencies []string } -func newDaemon(name, description string) (Daemon, error) { +func newDaemon(name, description string, dependencies []string) (Daemon, error) { - return &windowsRecord{name, description}, nil + return &windowsRecord{name, description, dependencies}, nil } // Install the service From 76b2721a8ae071a74ac68d74890d29b0b98645e3 Mon Sep 17 00:00:00 2001 From: Yo Takezawa Date: Tue, 1 Sep 2015 10:14:53 +0900 Subject: [PATCH 2/2] Update examples --- README.md | 7 +++++-- daemon.go | 5 ++++- example/myservice.go | 5 ++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 80ad208..35ad5a4 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ import ( ) func main() { - service, err := daemon.New("name", "description") + service, err := daemon.New("name", "description", []string{}) if err != nil { log.Fatal("Error: ", err) } @@ -57,6 +57,9 @@ const ( port = ":9977" ) +// dependencies that are required by the service +var dependencies = []string{"dummy.service"} + var stdlog, errlog *log.Logger // Service has embedded daemon @@ -155,7 +158,7 @@ func init() { } func main() { - srv, err := daemon.New(name, description) + srv, err := daemon.New(name, description, dependencies) if err != nil { errlog.Println("Error: ", err) os.Exit(1) diff --git a/daemon.go b/daemon.go index 40eeae5..7dd1a17 100644 --- a/daemon.go +++ b/daemon.go @@ -36,6 +36,9 @@ Example: port = ":9977" ) + // dependencies that are required by the service + var dependencies = []string{"dummy.service"} + var stdlog, errlog *log.Logger // Service has embedded daemon @@ -134,7 +137,7 @@ Example: } func main() { - srv, err := daemon.New(name, description) + srv, err := daemon.New(name, description, dependencies) if err != nil { errlog.Println("Error: ", err) os.Exit(1) diff --git a/example/myservice.go b/example/myservice.go index a4657dd..f3fcc01 100644 --- a/example/myservice.go +++ b/example/myservice.go @@ -22,6 +22,9 @@ const ( port = ":9977" ) +// dependencies that are required by the service +var dependencies = []string{"dummy.service"} + var stdlog, errlog *log.Logger // Service has embedded daemon @@ -120,7 +123,7 @@ func init() { } func main() { - srv, err := daemon.New(name, description) + srv, err := daemon.New(name, description, dependencies) if err != nil { errlog.Println("Error: ", err) os.Exit(1)