signals_unix.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // +build !windows
  2. package service
  3. import (
  4. "os"
  5. "os/signal"
  6. "syscall"
  7. "github.com/drakkan/sftpgo/v2/common"
  8. "github.com/drakkan/sftpgo/v2/dataprovider"
  9. "github.com/drakkan/sftpgo/v2/ftpd"
  10. "github.com/drakkan/sftpgo/v2/httpd"
  11. "github.com/drakkan/sftpgo/v2/logger"
  12. "github.com/drakkan/sftpgo/v2/telemetry"
  13. "github.com/drakkan/sftpgo/v2/webdavd"
  14. )
  15. func registerSignals() {
  16. c := make(chan os.Signal, 1)
  17. signal.Notify(c, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGUSR1)
  18. go func() {
  19. for sig := range c {
  20. switch sig {
  21. case syscall.SIGHUP:
  22. handleSIGHUP()
  23. case syscall.SIGUSR1:
  24. handleSIGUSR1()
  25. case syscall.SIGINT, syscall.SIGTERM:
  26. handleInterrupt()
  27. }
  28. }
  29. }()
  30. }
  31. func handleSIGHUP() {
  32. logger.Debug(logSender, "", "Received reload request")
  33. err := dataprovider.ReloadConfig()
  34. if err != nil {
  35. logger.Warn(logSender, "", "error reloading dataprovider configuration: %v", err)
  36. }
  37. err = httpd.ReloadCertificateMgr()
  38. if err != nil {
  39. logger.Warn(logSender, "", "error reloading cert manager: %v", err)
  40. }
  41. err = ftpd.ReloadCertificateMgr()
  42. if err != nil {
  43. logger.Warn(logSender, "", "error reloading FTPD cert manager: %v", err)
  44. }
  45. err = webdavd.ReloadCertificateMgr()
  46. if err != nil {
  47. logger.Warn(logSender, "", "error reloading WebDAV cert manager: %v", err)
  48. }
  49. err = telemetry.ReloadCertificateMgr()
  50. if err != nil {
  51. logger.Warn(logSender, "", "error reloading telemetry cert manager: %v", err)
  52. }
  53. err = common.ReloadDefender()
  54. if err != nil {
  55. logger.Warn(logSender, "", "error reloading defender's lists: %v", err)
  56. }
  57. }
  58. func handleSIGUSR1() {
  59. logger.Debug(logSender, "", "Received log file rotation request")
  60. err := logger.RotateLogFile()
  61. if err != nil {
  62. logger.Warn(logSender, "", "error rotating log file: %v", err)
  63. }
  64. }
  65. func handleInterrupt() {
  66. logger.Debug(logSender, "", "Received interrupt request")
  67. os.Exit(0)
  68. }