Browse Source

ensure file exists

mhsanaei 8 months ago
parent
commit
2486b5ff43
1 changed files with 38 additions and 12 deletions
  1. 38 12
      web/job/clear_logs_job.go

+ 38 - 12
web/job/clear_logs_job.go

@@ -3,6 +3,7 @@ package job
 import (
 	"io"
 	"os"
+	"path/filepath"
 
 	"x-ui/logger"
 	"x-ui/xray"
@@ -14,28 +15,53 @@ func NewClearLogsJob() *ClearLogsJob {
 	return new(ClearLogsJob)
 }
 
+// ensureFileExists creates the necessary directories and file if they don't exist
+func ensureFileExists(path string) error {
+	dir := filepath.Dir(path)
+	if err := os.MkdirAll(dir, 0755); err != nil {
+		return err
+	}
+
+	file, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, 0644)
+	if err != nil {
+		return err
+	}
+	file.Close()
+	return nil
+}
+
 // Here Run is an interface method of the Job interface
 func (j *ClearLogsJob) Run() {
 	logFiles := []string{xray.GetIPLimitLogPath(), xray.GetIPLimitBannedLogPath(), xray.GetAccessPersistentLogPath()}
 	logFilesPrev := []string{xray.GetIPLimitBannedPrevLogPath(), xray.GetAccessPersistentPrevLogPath()}
 
-	// clear log files and copy to previous logs
+	// Ensure all log files and their paths exist
+	for _, path := range append(logFiles, logFilesPrev...) {
+		if err := ensureFileExists(path); err != nil {
+			logger.Warning("Failed to ensure log file exists:", path, "-", err)
+		}
+	}
+
+	// Clear log files and copy to previous logs
 	for i := 0; i < len(logFiles); i++ {
 		if i > 0 {
-			// copy to previous logs
+			// Copy to previous logs
 			logFilePrev, err := os.OpenFile(logFilesPrev[i-1], os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
 			if err != nil {
-				logger.Warning("clear logs job err:", err)
+				logger.Warning("Failed to open previous log file for writing:", logFilesPrev[i-1], "-", err)
+				continue
+			}
+
+			logFile, err := os.OpenFile(logFiles[i], os.O_RDONLY, 0644)
+			if err != nil {
+				logger.Warning("Failed to open current log file for reading:", logFiles[i], "-", err)
+				logFilePrev.Close()
+				continue
 			}
 
-			logFile, err :=  os.OpenFile(logFiles[i], os.O_CREATE|os.O_RDONLY, 0644)
-			if err == nil {
-				_, err = io.Copy(logFilePrev, logFile)
-				if err != nil {
-					logger.Warning("clear logs job err:", err)
-				}
-			} else {
-				logger.Warning("clear logs job err:", err)
+			_, err = io.Copy(logFilePrev, logFile)
+			if err != nil {
+				logger.Warning("Failed to copy log file:", logFiles[i], "to", logFilesPrev[i-1], "-", err)
 			}
 
 			logFile.Close()
@@ -44,7 +70,7 @@ func (j *ClearLogsJob) Run() {
 
 		err := os.Truncate(logFiles[i], 0)
 		if err != nil {
-			logger.Warning("clear logs job err:", err)
+			logger.Warning("Failed to truncate log file:", logFiles[i], "-", err)
 		}
 	}
 }