clear_logs_job.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package job
  2. import (
  3. "io"
  4. "os"
  5. "x-ui/logger"
  6. "x-ui/xray"
  7. )
  8. type ClearLogsJob struct{}
  9. func NewClearLogsJob() *ClearLogsJob {
  10. return new(ClearLogsJob)
  11. }
  12. // Here Run is an interface method of the Job interface
  13. func (j *ClearLogsJob) Run() {
  14. logFiles := []string{xray.GetIPLimitLogPath(), xray.GetIPLimitBannedLogPath(), xray.GetAccessPersistentLogPath()}
  15. logFilesPrev := []string{xray.GetIPLimitBannedPrevLogPath(), xray.GetAccessPersistentPrevLogPath()}
  16. // clear log files and copy to previous logs
  17. for i := 0; i < len(logFiles); i++ {
  18. if i > 0 {
  19. // copy to previous logs
  20. logFilePrev, err := os.OpenFile(logFilesPrev[i-1], os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
  21. if err != nil {
  22. logger.Warning("clear logs job err:", err)
  23. }
  24. logFile, err := os.OpenFile(logFiles[i], os.O_CREATE|os.O_RDONLY, 0644)
  25. if err == nil {
  26. _, err = io.Copy(logFilePrev, logFile)
  27. if err != nil {
  28. logger.Warning("clear logs job err:", err)
  29. }
  30. } else {
  31. logger.Warning("clear logs job err:", err)
  32. }
  33. logFile.Close()
  34. logFilePrev.Close()
  35. }
  36. err := os.Truncate(logFiles[i], 0)
  37. if err != nil {
  38. logger.Warning("clear logs job err:", err)
  39. }
  40. }
  41. }