ssl_update.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package cron_server
  2. import (
  3. "github.com/Jinnrry/pmail/config"
  4. "github.com/Jinnrry/pmail/services/setup/ssl"
  5. "github.com/Jinnrry/pmail/signal"
  6. log "github.com/sirupsen/logrus"
  7. "time"
  8. )
  9. var expiredTime time.Time
  10. func Start() {
  11. // 第一次启动,等待到初始化完成
  12. if config.Instance == nil || config.IsInit == false {
  13. for {
  14. time.Sleep(1 * time.Minute)
  15. if config.Instance != nil && config.IsInit {
  16. break
  17. }
  18. }
  19. }
  20. if config.Instance.SSLType == config.SSLTypeAutoHTTP || config.Instance.SSLType == config.SSLTypeAutoDNS {
  21. go sslUpdateLoop()
  22. } else {
  23. go sslCheck()
  24. }
  25. }
  26. // 每天检查一遍SSL证书是否更新,更新就重启
  27. func sslCheck() {
  28. var err error
  29. _, expiredTime, err = ssl.CheckSSLCrtInfo()
  30. if err != nil {
  31. panic(err)
  32. }
  33. for {
  34. time.Sleep(24 * time.Hour)
  35. _, newExpTime, err := ssl.CheckSSLCrtInfo()
  36. if err != nil {
  37. log.Errorf("SSL Check Error! %+v", err)
  38. }
  39. if newExpTime != expiredTime {
  40. expiredTime = newExpTime
  41. log.Infoln("SSL certificate had update! restarting")
  42. signal.RestartChan <- true
  43. }
  44. }
  45. }
  46. // 每天检查一遍SSL证书是否即将过期,即将过期就重新生成
  47. func sslUpdateLoop() {
  48. for {
  49. ssl.Update(true)
  50. // 每24小时检测一次证书有效期
  51. time.Sleep(24 * time.Hour)
  52. }
  53. }