signals_unix.go 2.1 KB

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