Rewrite shell signal handling
This commit is contained in:
@@ -0,0 +1,20 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/AlexxIT/go2rtc/internal/api"
|
||||||
|
"github.com/AlexxIT/go2rtc/internal/app"
|
||||||
|
"github.com/AlexxIT/go2rtc/internal/hass"
|
||||||
|
"github.com/AlexxIT/go2rtc/internal/streams"
|
||||||
|
"github.com/AlexxIT/go2rtc/pkg/shell"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
app.Init()
|
||||||
|
streams.Init()
|
||||||
|
|
||||||
|
api.Init()
|
||||||
|
|
||||||
|
hass.Init()
|
||||||
|
|
||||||
|
shell.RunUntilSignal()
|
||||||
|
}
|
||||||
@@ -4,9 +4,7 @@ import (
|
|||||||
"github.com/AlexxIT/go2rtc/internal/app"
|
"github.com/AlexxIT/go2rtc/internal/app"
|
||||||
"github.com/AlexxIT/go2rtc/internal/rtsp"
|
"github.com/AlexxIT/go2rtc/internal/rtsp"
|
||||||
"github.com/AlexxIT/go2rtc/internal/streams"
|
"github.com/AlexxIT/go2rtc/internal/streams"
|
||||||
"os"
|
"github.com/AlexxIT/go2rtc/pkg/shell"
|
||||||
"os/signal"
|
|
||||||
"syscall"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -15,9 +13,5 @@ func main() {
|
|||||||
|
|
||||||
rtsp.Init()
|
rtsp.Init()
|
||||||
|
|
||||||
sigs := make(chan os.Signal, 1)
|
shell.RunUntilSignal()
|
||||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
||||||
<-sigs
|
|
||||||
|
|
||||||
println("exit OK")
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,7 @@ import (
|
|||||||
"github.com/AlexxIT/go2rtc/internal/tapo"
|
"github.com/AlexxIT/go2rtc/internal/tapo"
|
||||||
"github.com/AlexxIT/go2rtc/internal/webrtc"
|
"github.com/AlexxIT/go2rtc/internal/webrtc"
|
||||||
"github.com/AlexxIT/go2rtc/internal/webtorrent"
|
"github.com/AlexxIT/go2rtc/internal/webtorrent"
|
||||||
"os"
|
"github.com/AlexxIT/go2rtc/pkg/shell"
|
||||||
"os/signal"
|
|
||||||
"syscall"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -66,9 +64,5 @@ func main() {
|
|||||||
ngrok.Init()
|
ngrok.Init()
|
||||||
debug.Init()
|
debug.Init()
|
||||||
|
|
||||||
sigs := make(chan os.Signal, 1)
|
shell.RunUntilSignal()
|
||||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
||||||
<-sigs
|
|
||||||
|
|
||||||
println("exit OK")
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
package shell
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"regexp"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func ReplaceEnvVars(text string) string {
|
|
||||||
re := regexp.MustCompile(`\${([^}{]+)}`)
|
|
||||||
return re.ReplaceAllStringFunc(text, func(match string) string {
|
|
||||||
key := match[2 : len(match)-1]
|
|
||||||
|
|
||||||
var def string
|
|
||||||
var dok bool
|
|
||||||
|
|
||||||
if i := strings.IndexByte(key, ':'); i > 0 {
|
|
||||||
key, def = key[:i], key[i+1:]
|
|
||||||
dok = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if value, vok := os.LookupEnv(key); vok {
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
if dok {
|
|
||||||
return def
|
|
||||||
}
|
|
||||||
|
|
||||||
return match
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,11 @@
|
|||||||
package shell
|
package shell
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
"syscall"
|
||||||
)
|
)
|
||||||
|
|
||||||
func QuoteSplit(s string) []string {
|
func QuoteSplit(s string) []string {
|
||||||
@@ -39,3 +43,34 @@ func QuoteSplit(s string) []string {
|
|||||||
}
|
}
|
||||||
return a
|
return a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ReplaceEnvVars(text string) string {
|
||||||
|
re := regexp.MustCompile(`\${([^}{]+)}`)
|
||||||
|
return re.ReplaceAllStringFunc(text, func(match string) string {
|
||||||
|
key := match[2 : len(match)-1]
|
||||||
|
|
||||||
|
var def string
|
||||||
|
var dok bool
|
||||||
|
|
||||||
|
if i := strings.IndexByte(key, ':'); i > 0 {
|
||||||
|
key, def = key[:i], key[i+1:]
|
||||||
|
dok = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if value, vok := os.LookupEnv(key); vok {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
if dok {
|
||||||
|
return def
|
||||||
|
}
|
||||||
|
|
||||||
|
return match
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func RunUntilSignal() {
|
||||||
|
sigs := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||||
|
println("exit with signal:", (<-sigs).String())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user