nginx.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package nginx
  2. import (
  3. "os"
  4. "sync"
  5. "time"
  6. "github.com/0xJacky/Nginx-UI/internal/docker"
  7. "github.com/0xJacky/Nginx-UI/settings"
  8. )
  9. var (
  10. mutex sync.Mutex
  11. lastStdOut string
  12. lastStdErr error
  13. )
  14. // TestConfig tests the nginx config
  15. func TestConfig() (stdOut string, stdErr error) {
  16. mutex.Lock()
  17. defer mutex.Unlock()
  18. if settings.NginxSettings.TestConfigCmd != "" {
  19. return execShell(settings.NginxSettings.TestConfigCmd)
  20. }
  21. return execCommand("nginx", "-t")
  22. }
  23. // Reload reloads the nginx
  24. func Reload() (stdOut string, stdErr error) {
  25. mutex.Lock()
  26. defer mutex.Unlock()
  27. if settings.NginxSettings.ReloadCmd != "" {
  28. return execShell(settings.NginxSettings.ReloadCmd)
  29. }
  30. return execCommand("nginx", "-s", "reload")
  31. }
  32. // Restart restarts the nginx
  33. func Restart() {
  34. mutex.Lock()
  35. defer mutex.Unlock()
  36. // fix(docker): nginx restart always output network error
  37. time.Sleep(500 * time.Millisecond)
  38. if settings.NginxSettings.RestartCmd != "" {
  39. lastStdOut, lastStdErr = execShell(settings.NginxSettings.RestartCmd)
  40. return
  41. }
  42. pidPath := GetPIDPath()
  43. daemon := GetSbinPath()
  44. lastStdOut, lastStdErr = execCommand("start-stop-daemon", "--stop", "--quiet", "--oknodo", "--retry=TERM/30/KILL/5", "--pidfile", pidPath)
  45. if lastStdErr != nil {
  46. return
  47. }
  48. if daemon == "" {
  49. lastStdOut, lastStdErr = execCommand("nginx")
  50. return
  51. }
  52. lastStdOut, lastStdErr = execCommand("start-stop-daemon", "--start", "--quiet", "--pidfile", pidPath, "--exec", daemon)
  53. }
  54. // GetLastOutput returns the last output of the nginx command
  55. func GetLastOutput() (stdOut string, stdErr error) {
  56. mutex.Lock()
  57. defer mutex.Unlock()
  58. return lastStdOut, lastStdErr
  59. }
  60. func IsNginxRunning() bool {
  61. pidPath := GetPIDPath()
  62. switch settings.NginxSettings.RunningInAnotherContainer() {
  63. case true:
  64. return docker.StatPath(pidPath)
  65. case false:
  66. if fileInfo, err := os.Stat(pidPath); err != nil || fileInfo.Size() == 0 {
  67. return false
  68. }
  69. return true
  70. }
  71. return false
  72. }