nginx.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package nginx
  2. import (
  3. "github.com/0xJacky/Nginx-UI/settings"
  4. "os/exec"
  5. "sync"
  6. "time"
  7. )
  8. var (
  9. mutex sync.Mutex
  10. lastOutput string
  11. )
  12. func TestConf() (out string) {
  13. mutex.Lock()
  14. defer mutex.Unlock()
  15. if settings.NginxSettings.TestConfigCmd != "" {
  16. out = execShell(settings.NginxSettings.TestConfigCmd)
  17. return
  18. }
  19. out = execCommand("nginx", "-t")
  20. return
  21. }
  22. func Reload() (out string) {
  23. mutex.Lock()
  24. defer mutex.Unlock()
  25. if settings.NginxSettings.ReloadCmd != "" {
  26. out = execShell(settings.NginxSettings.ReloadCmd)
  27. return
  28. }
  29. out = execCommand("nginx", "-s", "reload")
  30. return
  31. }
  32. func Restart() {
  33. mutex.Lock()
  34. defer mutex.Unlock()
  35. // fix(docker): nginx restart always output network error
  36. time.Sleep(500 * time.Millisecond)
  37. if settings.NginxSettings.RestartCmd != "" {
  38. lastOutput = execShell(settings.NginxSettings.RestartCmd)
  39. return
  40. }
  41. pidPath := GetPIDPath()
  42. daemon := GetSbinPath()
  43. lastOutput = execCommand("start-stop-daemon", "--stop", "--quiet", "--oknodo", "--retry=TERM/30/KILL/5", "--pidfile", pidPath)
  44. if daemon == "" {
  45. lastOutput += execCommand("nginx")
  46. return
  47. }
  48. lastOutput += execCommand("start-stop-daemon", "--start", "--quiet", "--pidfile", pidPath, "--exec", daemon)
  49. return
  50. }
  51. func GetLastOutput() string {
  52. mutex.Lock()
  53. defer mutex.Unlock()
  54. return lastOutput
  55. }
  56. func execShell(cmd string) (out string) {
  57. bytes, err := exec.Command("/bin/sh", "-c", cmd).CombinedOutput()
  58. out = string(bytes)
  59. if err != nil {
  60. out += " " + err.Error()
  61. }
  62. return
  63. }
  64. func execCommand(name string, cmd ...string) (out string) {
  65. bytes, err := exec.Command(name, cmd...).CombinedOutput()
  66. out = string(bytes)
  67. if err != nil {
  68. out += " " + err.Error()
  69. }
  70. return
  71. }