From 4939474e895fd99f0f10f99b66c40268da326a3a Mon Sep 17 00:00:00 2001 From: somebodywashere <68244480+somebodywashere@users.noreply.github.com> Date: Mon, 18 Dec 2023 20:48:56 +0300 Subject: [PATCH] Reduce outage time on Xray errors --- web/job/check_xray_running_job.go | 21 ++++++++++++++------- web/service/xray.go | 2 +- web/web.go | 8 ++++---- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/web/job/check_xray_running_job.go b/web/job/check_xray_running_job.go index f1a848bf..d9ffeb7a 100644 --- a/web/job/check_xray_running_job.go +++ b/web/job/check_xray_running_job.go @@ -1,6 +1,9 @@ package job -import "x-ui/web/service" +import ( + "x-ui/logger" + "x-ui/web/service" +) type CheckXrayRunningJob struct { xrayService service.XrayService @@ -15,11 +18,15 @@ func NewCheckXrayRunningJob() *CheckXrayRunningJob { func (j *CheckXrayRunningJob) Run() { if j.xrayService.IsXrayRunning() { j.checkTime = 0 - return + } else { + j.checkTime++ + //only restart if it's down 2 times in a row + if j.checkTime > 1 { + err := j.xrayService.RestartXray(false) + j.checkTime = 0 + if err != nil { + logger.Error("Restart xray failed:", err) + } + } } - j.checkTime++ - if j.checkTime < 2 { - return - } - j.xrayService.SetToNeedRestart() } diff --git a/web/service/xray.go b/web/service/xray.go index 7233cec5..82d1cc3f 100644 --- a/web/service/xray.go +++ b/web/service/xray.go @@ -185,7 +185,7 @@ func (s *XrayService) RestartXray(isForce bool) error { return err } - if p != nil && p.IsRunning() { + if s.IsXrayRunning() { if !isForce && p.GetConfig().Equals(xrayConfig) { logger.Debug("It does not need to restart xray") return nil diff --git a/web/web.go b/web/web.go index 51b7603c..1bb6e235 100644 --- a/web/web.go +++ b/web/web.go @@ -240,11 +240,11 @@ func (s *Server) startTask() { if err != nil { logger.Warning("start xray failed:", err) } - // Check whether xray is running every 30 seconds - s.cron.AddJob("@every 30s", job.NewCheckXrayRunningJob()) + // Check whether xray is running every second + s.cron.AddJob("@every 1s", job.NewCheckXrayRunningJob()) - // Check if xray needs to be restarted - s.cron.AddFunc("@every 10s", func() { + // Check if xray needs to be restarted every 30 seconds + s.cron.AddFunc("@every 30s", func() { if s.xrayService.IsNeedRestartAndSetFalse() { err := s.xrayService.RestartXray(false) if err != nil {