signals_unix.go 1.9 KB

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