diff --git a/go.mod b/go.mod index 1050396..e355994 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,10 @@ go 1.21.0 require github.com/spf13/pflag v1.0.5 require ( + github.com/hpcloud/tail v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/spf13/cobra v1.8.0 // indirect + golang.org/x/sys v0.22.0 // indirect + gopkg.in/fsnotify.v1 v1.4.7 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect ) diff --git a/go.sum b/go.sum index d0e8c2c..426c610 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -6,5 +8,11 @@ github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/backup.go b/pkg/backup.go index fae5140..a2a5fff 100644 --- a/pkg/backup.go +++ b/pkg/backup.go @@ -6,6 +6,7 @@ package pkg import ( "fmt" + "github.com/hpcloud/tail" "github.com/jkaninda/mysql-bkup/utils" "github.com/spf13/cobra" "log" @@ -56,7 +57,6 @@ func scheduledMode() { fmt.Println(" Starting MySQL Bkup... ") fmt.Println("***********************************") utils.Info("Running in Scheduled mode") - utils.Info("Log file in /var/log/mysql-bkup.log") utils.Info("Execution period ", os.Getenv("SCHEDULE_PERIOD")) //Test database connexion @@ -65,10 +65,33 @@ func scheduledMode() { utils.Info("Creating backup job...") CreateCrontabScript(disableCompression, storage) - //Start Supervisor - supervisordCmd := exec.Command("supervisord", "-c", "/etc/supervisor/supervisord.conf") - if err := supervisordCmd.Run(); err != nil { - utils.Fatalf("Error starting supervisord: %v\n", err) + supervisorConfig := "/etc/supervisor/supervisord.conf" + + // Start Supervisor + cmd := exec.Command("supervisord", "-c", supervisorConfig) + err := cmd.Start() + if err != nil { + utils.Fatal("Failed to start supervisord: %v", err) + } + utils.Info("Starting backup job...") + defer func() { + if err := cmd.Process.Kill(); err != nil { + utils.Info("Failed to kill supervisord process: %v", err) + } else { + utils.Info("Supervisor stopped.") + } + }() + if _, err := os.Stat(cronLogFile); os.IsNotExist(err) { + utils.Fatal("Log file %s does not exist.", cronLogFile) + } + t, err := tail.TailFile(cronLogFile, tail.Config{Follow: true}) + if err != nil { + utils.Fatalf("Failed to tail file: %v", err) + } + + // Read and print new lines from the log file + for line := range t.Lines { + fmt.Println(line.Text) } } diff --git a/pkg/scripts.go b/pkg/scripts.go index 2ba79f7..1011da1 100644 --- a/pkg/scripts.go +++ b/pkg/scripts.go @@ -11,9 +11,6 @@ import ( "os/exec" ) -const cronLogFile = "/var/log/mysql-bkup.log" -const backupCronFile = "/usr/local/bin/backup_cron.sh" - func CreateCrontabScript(disableCompression bool, storage string) { //task := "/usr/local/bin/backup_cron.sh" touchCmd := exec.Command("touch", backupCronFile) @@ -54,6 +51,11 @@ bkup backup --dbname %s --port %s %v } + touchLogCmd := exec.Command("touch", cronLogFile) + if err := touchLogCmd.Run(); err != nil { + utils.Fatalf("Error creating file %s: %v\n", cronLogFile, err) + } + cronJob := "/etc/cron.d/backup_cron" touchCronCmd := exec.Command("touch", cronJob) if err := touchCronCmd.Run(); err != nil { diff --git a/pkg/var.go b/pkg/var.go index 3f7045e..7c4e480 100644 --- a/pkg/var.go +++ b/pkg/var.go @@ -2,6 +2,8 @@ package pkg const s3MountPath string = "/s3mnt" const s3fsPasswdFile string = "/etc/passwd-s3fs" +const cronLogFile = "/var/log/mysql-bkup.log" +const backupCronFile = "/usr/local/bin/backup_cron.sh" var ( storage = "local"