// Package job provides background job implementations for the 3x-ui web panel, // including traffic monitoring, system checks, and periodic maintenance tasks. package job import ( "github.com/mhsanaei/3x-ui/v2/logger" "github.com/mhsanaei/3x-ui/v2/web/service" ) // CheckXrayRunningJob monitors Xray process health and restarts it if it crashes. type CheckXrayRunningJob struct { xrayService service.XrayService checkTime int } // NewCheckXrayRunningJob creates a new Xray health check job instance. func NewCheckXrayRunningJob() *CheckXrayRunningJob { return new(CheckXrayRunningJob) } // Run checks if Xray has crashed and restarts it after confirming it's down for 2 consecutive checks. func (j *CheckXrayRunningJob) Run() { if !j.xrayService.DidXrayCrash() { j.checkTime = 0 } 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) } } } }