improve systemd or docker detection

This commit is contained in:
Alireza Ahmadi
2024-10-29 13:14:25 +01:00
parent 1d46d72186
commit 282e244517
4 changed files with 14 additions and 4 deletions
+9
View File
@@ -79,3 +79,12 @@ func GetDefaultConfig() string {
func GetEnvApi() string { func GetEnvApi() string {
return os.Getenv("SINGBOX_API") return os.Getenv("SINGBOX_API")
} }
func IsSystemd() bool {
pid := os.Getppid()
cmdline, err := os.ReadFile(fmt.Sprintf("/proc/%d/comm", pid))
if err != nil {
return false
}
return string(cmdline) == "systemd\n"
}
+2 -2
View File
@@ -3,6 +3,7 @@ package logger
import ( import (
"fmt" "fmt"
"os" "os"
"s-ui/config"
"time" "time"
"github.com/op/go-logging" "github.com/op/go-logging"
@@ -22,14 +23,13 @@ func InitLogger(level logging.Level) {
var err error var err error
var backend logging.Backend var backend logging.Backend
var format logging.Formatter var format logging.Formatter
ppid := os.Getppid()
backend, err = logging.NewSyslogBackend("") backend, err = logging.NewSyslogBackend("")
if err != nil { if err != nil {
println("Unable to use syslog: " + err.Error()) println("Unable to use syslog: " + err.Error())
backend = logging.NewLogBackend(os.Stderr, "", 0) backend = logging.NewLogBackend(os.Stderr, "", 0)
} }
if ppid > 1 && err != nil { if config.IsSystemd() && err != nil {
format = logging.MustStringFormatter(`%{time:2006/01/02 15:04:05} %{level} - %{message}`) format = logging.MustStringFormatter(`%{time:2006/01/02 15:04:05} %{level} - %{message}`)
} else { } else {
format = logging.MustStringFormatter(`%{level} - %{message}`) format = logging.MustStringFormatter(`%{level} - %{message}`)
+2
View File
@@ -14,6 +14,7 @@ import (
var ApiAddr string var ApiAddr string
var LastUpdate int64 var LastUpdate int64
var IsSystemd bool
type ConfigService struct { type ConfigService struct {
ClientService ClientService
@@ -38,6 +39,7 @@ func NewConfigService() *ConfigService {
} }
func (s *ConfigService) InitConfig() error { func (s *ConfigService) InitConfig() error {
IsSystemd = config.IsSystemd()
configPath := config.GetBinFolderPath() configPath := config.GetBinFolderPath()
data, err := os.ReadFile(configPath + "/config.json") data, err := os.ReadFile(configPath + "/config.json")
if err != nil { if err != nil {
+1 -2
View File
@@ -145,10 +145,9 @@ func (s *ServerService) GetLogs(service string, count string, level string) []st
if service == "s-ui" { if service == "s-ui" {
return logger.GetLogs(c, level) return logger.GetLogs(c, level)
} }
ppid := os.Getppid()
var lines []string var lines []string
var cmdArgs []string var cmdArgs []string
if ppid > 1 { if IsSystemd {
cmdArgs = []string{"journalctl", "-u", service, "--no-pager", "-n", count, "-p", level} cmdArgs = []string{"journalctl", "-u", service, "--no-pager", "-n", count, "-p", level}
} else { } else {
cmdArgs = []string{"tail", "/logs/" + service + ".log", "-n", count} cmdArgs = []string{"tail", "/logs/" + service + ".log", "-n", count}