ssl_update.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package cron_server
  2. import (
  3. log "github.com/sirupsen/logrus"
  4. "pmail/config"
  5. "pmail/services/setup/ssl"
  6. "pmail/signal"
  7. "time"
  8. )
  9. var expiredTime time.Time
  10. func Start() {
  11. if config.Instance.SSLType == "0" {
  12. go sslUpdate()
  13. } else {
  14. go sslCheck()
  15. }
  16. }
  17. // 每天检查一遍SSL证书是否更新,更新就重启
  18. func sslCheck() {
  19. var err error
  20. _, expiredTime, err = ssl.CheckSSLCrtInfo()
  21. if err != nil {
  22. panic(err)
  23. }
  24. for {
  25. time.Sleep(24 * time.Hour)
  26. _, newExpTime, err := ssl.CheckSSLCrtInfo()
  27. if err != nil {
  28. log.Errorf("SSL Check Error! %+v", err)
  29. }
  30. if newExpTime != expiredTime {
  31. log.Infoln("SSL certificate had update! restarting")
  32. signal.RestartChan <- true
  33. }
  34. }
  35. }
  36. // 每天检查一遍SSL证书是否即将过期,即将过期就重新生成
  37. func sslUpdate() {
  38. for {
  39. if config.Instance != nil && config.Instance.IsInit && config.Instance.SSLType == "0" {
  40. days, _, err := ssl.CheckSSLCrtInfo()
  41. if days < 30 || err != nil {
  42. if err != nil {
  43. log.Errorf("SSL Check Error, Update SSL Certificate. Error Info :%+v", err)
  44. } else {
  45. log.Infof("SSL certificate remaining time is only %d days, renew SSL certificate.", days)
  46. }
  47. err = ssl.GenSSL(true)
  48. if err != nil {
  49. log.Errorf("SSL Update Error! %+v", err)
  50. }
  51. // 更新完证书,重启服务
  52. signal.RestartChan <- true
  53. } else {
  54. log.Debugf("SSL Check.")
  55. }
  56. }
  57. // 每24小时检测一次证书有效期
  58. time.Sleep(24 * time.Hour)
  59. }
  60. }