diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 916aca1..ee8ad36 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,5 +35,5 @@ jobs: file: "./docker/Dockerfile" platforms: linux/amd64,linux/arm64 tags: | - "${{env.BUILDKIT_IMAGE}}:v0.6" + "${{env.BUILDKIT_IMAGE}}:v0.7" "${{env.BUILDKIT_IMAGE}}:latest" diff --git a/README.md b/README.md index f83edbd..d88c5c2 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,7 @@ docker-compose up -d ```sh docker run --rm --privileged --device /dev/fuse --name pg-bkup -e "DB_HOST=db_hostname" -e "DB_USERNAME=username" -e "DB_PASSWORD=password" -e "ACCESS_KEY=your_access_key" -e "SECRET_KEY=your_secret_key" -e "BUCKETNAME=your_bucket_name" -e "S3_ENDPOINT=https://s3.us-west-2.amazonaws.com" jkaninda/pg-bkup pg-bkup backup -s s3 -d database_name ``` -> To change s3 backup path add this flag : --path /mycustomPath . default path is /pg-bkup +> To change s3 backup path add this flag : --path /my_customPath . default path is /pg-bkup Simple S3 backup usage @@ -279,7 +279,7 @@ services: command: - /bin/sh - -c - - pg-bkup backup --storage s3 --path /mys3_custome_path --dbname database_name --mode scheduled --period "*/30 * * * *" + - pg-bkup backup --storage s3 --path /mys3_custom_path --dbname database_name --mode scheduled --period "*/30 * * * *" environment: - DB_PORT=5432 - DB_HOST=postgreshost diff --git a/go.mod b/go.mod index 145b169..789cfc7 100644 --- a/go.mod +++ b/go.mod @@ -7,4 +7,10 @@ require ( github.com/spf13/pflag v1.0.5 ) -require github.com/inconshreveable/mousetrap v1.1.0 // indirect +require ( + github.com/hpcloud/tail v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.1.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 249deb5..f21a78b 100644 --- a/pkg/backup.go +++ b/pkg/backup.go @@ -6,6 +6,7 @@ package pkg import ( "fmt" + "github.com/hpcloud/tail" "github.com/jkaninda/pg-bkup/utils" "github.com/spf13/cobra" "log" @@ -58,22 +59,41 @@ func scheduledMode() { fmt.Println(" Starting PostgreSQL Bkup... ") fmt.Println("***********************************") utils.Info("Running in Scheduled mode") - utils.Info("Log file in /var/log/pg-bkup.log") utils.Info("Execution period ", os.Getenv("SCHEDULE_PERIOD")) //Test database connexion utils.TestDatabaseConnection() - //Test database connexion - utils.TestDatabaseConnection() - 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) } } @@ -86,6 +106,7 @@ func BackupDatabase(disableCompression bool, prune bool, keepLast int) { dbPort = os.Getenv("DB_PORT") storagePath = os.Getenv("STORAGE_PATH") + utils.Info("Starting database backup...") if os.Getenv("DB_HOST") == "" || os.Getenv("DB_NAME") == "" || os.Getenv("DB_USERNAME") == "" || os.Getenv("DB_PASSWORD") == "" { utils.Fatal("Please make sure all required environment variables for database are set") } else { diff --git a/pkg/scripts.go b/pkg/scripts.go index bb31c05..0cc2d38 100644 --- a/pkg/scripts.go +++ b/pkg/scripts.go @@ -11,9 +11,6 @@ import ( "os/exec" ) -const cronLogFile = "/var/log/pg-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 0ce4fd4..ca9af1e 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/pg-bkup.log" +const backupCronFile = "/usr/local/bin/backup_cron.sh" var ( storage = "local"