| 123456789101112131415161718192021222324252627282930313233343536 | // Package job provides background job implementations for the 3x-ui web panel,// including traffic monitoring, system checks, and periodic maintenance tasks.package jobimport (	"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)			}		}	}}
 |