signals_unix.go 1.9 KB

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