From 4040e757445faee58544bf65bc5fa65458b56f9d Mon Sep 17 00:00:00 2001 From: Shulhan Date: Mon, 2 Feb 2026 23:11:46 +0700 Subject: cmd/gorankusu: implement socket based activation with systemd The internal/cmd/gorankusu now can run using systemd.socket(5). --- internal/cmd/gorankusu/main.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'internal/cmd') diff --git a/internal/cmd/gorankusu/main.go b/internal/cmd/gorankusu/main.go index 1ede9d4..a55a518 100644 --- a/internal/cmd/gorankusu/main.go +++ b/internal/cmd/gorankusu/main.go @@ -7,6 +7,7 @@ package main import ( "flag" "log" + "net" "os" "os/signal" "path/filepath" @@ -17,6 +18,7 @@ import ( "git.sr.ht/~shulhan/pakakeh.go/lib/memfs" "git.sr.ht/~shulhan/pakakeh.go/lib/mlog" "git.sr.ht/~shulhan/pakakeh.go/lib/os/exec" + "git.sr.ht/~shulhan/pakakeh.go/lib/systemd" "git.sr.ht/~shulhan/pakakeh.go/lib/watchfs/v2" "git.sr.ht/~shulhan/ciigo" @@ -54,11 +56,28 @@ func main() { } var ( - ex *gorankusu.Example - err error + listener net.Listener + ex *gorankusu.Example + err error ) - ex, err = gorankusu.NewExample(listenAddress, isDev) + listeners, err := systemd.Listeners(true) + if err != nil { + log.Fatal(err) + } + if len(listeners) > 1 { + log.Fatal(`too many listeners received for activation`) + } + if len(listeners) == 1 { + listener = listeners[0] + gotAddr := listener.Addr().String() + if gotAddr != listenAddress { + log.Fatalf(`invalid Listener address, got %s, want %s`, + gotAddr, listenAddress) + } + } + + ex, err = gorankusu.NewExample(listener, listenAddress, isDev) if err != nil { mlog.Fatalf(`%s`, err) } -- cgit v1.3