diff --git a/app/http/controllers/plugins/fail2ban_controller.go b/app/http/controllers/plugins/fail2ban_controller.go index b0e5e531..778251ed 100644 --- a/app/http/controllers/plugins/fail2ban_controller.go +++ b/app/http/controllers/plugins/fail2ban_controller.go @@ -168,7 +168,7 @@ ignoreregex = var err error switch jailName { case "ssh": - if os.IsDebian() { + if os.IsDebian() || os.IsUbuntu() { logPath = "/var/log/auth.log" } else { logPath = "/var/log/secure" diff --git a/internal/services/cron.go b/internal/services/cron.go index 460630fe..4a3d509a 100644 --- a/internal/services/cron.go +++ b/internal/services/cron.go @@ -2,9 +2,6 @@ package services import ( "errors" - "fmt" - "strings" - "github.com/TheTNB/panel/v2/app/models" "github.com/TheTNB/panel/v2/pkg/os" "github.com/TheTNB/panel/v2/pkg/shell" @@ -20,38 +17,29 @@ func NewCronImpl() *CronImpl { // AddToSystem 添加到系统 func (r *CronImpl) AddToSystem(cron models.Cron) error { - if os.IsRHEL() { - if _, err := shell.Execf(fmt.Sprintf(`echo "%s %s >> %s 2>&1" >> /var/spool/cron/root`, cron.Time, cron.Shell, cron.Log)); err != nil { - return err - } - return systemctl.Restart("crond") + if _, err := shell.Execf(`( crontab -l; echo "%s %s >> %s 2>&1" ) | sort - | uniq - | crontab -`, cron.Time, cron.Shell, cron.Log); err != nil { + return err } - if os.IsDebian() { - if _, err := shell.Execf(fmt.Sprintf(`echo "%s %s >> %s 2>&1" >> /var/spool/cron/crontabs/root`, cron.Time, cron.Shell, cron.Log)); err != nil { - return err - } - return systemctl.Restart("cron") - } - - return errors.New("不支持的系统") + return r.restartCron() } // DeleteFromSystem 从系统中删除 func (r *CronImpl) DeleteFromSystem(cron models.Cron) error { - // 需要转义 shell 路径的/为\/ - cron.Shell = strings.ReplaceAll(cron.Shell, "/", "\\/") + if _, err := shell.Execf(`( crontab -l | grep -v -F "%s %s >> %s 2>&1" ) | crontab -`, cron.Time, cron.Shell, cron.Log); err != nil { + return err + } + + return r.restartCron() +} + +// restartCron 重启 cron 服务 +func (r *CronImpl) restartCron() error { if os.IsRHEL() { - if _, err := shell.Execf("sed -i '/" + cron.Shell + "/d' /var/spool/cron/root"); err != nil { - return err - } return systemctl.Restart("crond") } - if os.IsDebian() { - if _, err := shell.Execf("sed -i '/" + cron.Shell + "/d' /var/spool/cron/crontabs/root"); err != nil { - return err - } + if os.IsDebian() || os.IsUbuntu() { return systemctl.Restart("cron") } diff --git a/pkg/os/os.go b/pkg/os/os.go index 759cf5d4..c9f35e26 100644 --- a/pkg/os/os.go +++ b/pkg/os/os.go @@ -15,3 +15,9 @@ func IsRHEL() bool { _, err := os.Stat("/etc/redhat-release") return err == nil } + +// IsUbuntu 判断是否是 Ubuntu 系统 +func IsUbuntu() bool { + _, err := os.Stat("/etc/lsb-release") + return err == nil +}