add systemd-socket activation
This commit is contained in:
1
go.mod
1
go.mod
@@ -5,6 +5,7 @@ go 1.21
|
||||
require (
|
||||
entgo.io/ent v0.12.5
|
||||
github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b
|
||||
github.com/coreos/go-systemd/v22 v22.5.0
|
||||
github.com/go-chi/chi/v5 v5.0.10
|
||||
github.com/go-chi/render v1.0.3
|
||||
github.com/jackc/pgx/v4 v4.18.1
|
||||
|
3
go.sum
3
go.sum
@@ -21,6 +21,8 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7
|
||||
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU=
|
||||
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
@@ -36,6 +38,7 @@ github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12f
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
|
||||
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
|
||||
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
|
28
main.go
28
main.go
@@ -6,6 +6,7 @@ import (
|
||||
"entgo.io/ent/dialect/sql"
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/coreos/go-systemd/v22/activation"
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
"github.com/go-chi/render"
|
||||
@@ -98,6 +99,32 @@ func main() {
|
||||
|
||||
log.Info("Start listening...")
|
||||
sockets := make([]net.Listener, 0)
|
||||
|
||||
// handle systemd socket activation
|
||||
listeners, err := activation.Listeners()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if len(listeners) > 0 {
|
||||
for _, l := range listeners {
|
||||
log.Infof("Listening on %s", l.Addr())
|
||||
if err != nil {
|
||||
log.Panicf("failure listing on socket %s: %v", l, err)
|
||||
}
|
||||
sockets = append(sockets, l)
|
||||
l := l
|
||||
go func() {
|
||||
srv := &http.Server{
|
||||
ReadTimeout: time.Duration(conf.Httpd.Timeout.Read) * time.Second,
|
||||
WriteTimeout: time.Duration(conf.Httpd.Timeout.Write) * time.Second,
|
||||
IdleTimeout: time.Duration(conf.Httpd.Timeout.Idle) * time.Second,
|
||||
Handler: r,
|
||||
}
|
||||
_ = srv.Serve(l)
|
||||
}()
|
||||
}
|
||||
} else { // handle config if not systemd-socket activated
|
||||
for _, l := range conf.Httpd.Listen {
|
||||
if l.Socket != "" {
|
||||
sL, err := net.Listen("unix", l.Socket)
|
||||
@@ -139,6 +166,7 @@ func main() {
|
||||
}(l)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
killLoop:
|
||||
for {
|
||||
|
Reference in New Issue
Block a user