nginx-ui/internal/nginx/nginx.go

93 lines
1.7 KiB
Go

package nginx
import (
"github.com/0xJacky/Nginx-UI/settings"
"os/exec"
"sync"
"time"
)
var (
mutex sync.Mutex
lastOutput string
)
func TestConf() (out string) {
mutex.Lock()
defer mutex.Unlock()
if settings.NginxSettings.TestConfigCmd != "" {
out = execShell(settings.NginxSettings.TestConfigCmd)
return
}
out = execCommand("nginx", "-t")
return
}
func Reload() (out string) {
mutex.Lock()
defer mutex.Unlock()
if settings.NginxSettings.ReloadCmd != "" {
out = execShell(settings.NginxSettings.ReloadCmd)
return
}
out = execCommand("nginx", "-s", "reload")
return
}
func Restart() {
mutex.Lock()
defer mutex.Unlock()
// fix(docker): nginx restart always output network error
time.Sleep(500 * time.Millisecond)
if settings.NginxSettings.RestartCmd != "" {
lastOutput = execShell(settings.NginxSettings.RestartCmd)
return
}
pidPath := GetPIDPath()
daemon := GetSbinPath()
lastOutput = execCommand("start-stop-daemon", "--stop", "--quiet", "--oknodo", "--retry=TERM/30/KILL/5", "--pidfile", pidPath)
if daemon == "" {
lastOutput += execCommand("nginx")
return
}
lastOutput += execCommand("start-stop-daemon", "--start", "--quiet", "--pidfile", pidPath, "--exec", daemon)
return
}
func GetLastOutput() string {
mutex.Lock()
defer mutex.Unlock()
return lastOutput
}
func execShell(cmd string) (out string) {
bytes, err := exec.Command("/bin/sh", "-c", cmd).CombinedOutput()
out = string(bytes)
if err != nil {
out += " " + err.Error()
}
return
}
func execCommand(name string, cmd ...string) (out string) {
bytes, err := exec.Command(name, cmd...).CombinedOutput()
out = string(bytes)
if err != nil {
out += " " + err.Error()
}
return
}