diff --git a/docker/Dockerfile b/docker/Dockerfile index b87fc10..389b3d2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -36,7 +36,7 @@ ENV TARGET_DB_NAME="localhost" ENV TARGET_DB_USERNAME="" ENV TARGET_DB_PASSWORD="" ARG DEBIAN_FRONTEND=noninteractive -ENV VERSION="v1.2.7" +ENV VERSION="v1.2.8" ENV BACKUP_CRON_EXPRESSION="" ENV TG_TOKEN="" ENV TG_CHAT_ID="" @@ -48,7 +48,7 @@ ARG BACKUP_CRON_SCRIPT="/usr/local/bin/backup_cron.sh" LABEL author="Jonas Kaninda" RUN apt-get update -qq -RUN apt install mysql-client supervisor cron gnupg -y +RUN apt install mysql-client cron gnupg -y # Clear cache RUN apt-get clean && rm -rf /var/lib/apt/lists/* @@ -69,8 +69,6 @@ RUN chmod +x /usr/local/bin/mysql-bkup RUN ln -s /usr/local/bin/mysql-bkup /usr/local/bin/bkup -ADD docker/supervisord.conf /etc/supervisor/supervisord.conf - # Create backup script and make it executable RUN echo '#!/bin/sh\n/usr/local/bin/mysql-bkup backup "$@"' > /usr/local/bin/backup && \ chmod +x /usr/local/bin/backup diff --git a/pkg/backup.go b/pkg/backup.go index f7bb3c0..c95a780 100644 --- a/pkg/backup.go +++ b/pkg/backup.go @@ -38,23 +38,25 @@ func StartBackup(cmd *cobra.Command) { // Run in scheduled mode func scheduledMode(db *dbConfig, config *BackupConfig) { utils.Info("Running in Scheduled mode") - utils.Info("Backup cron expression: %s", os.Getenv("BACKUP_CRON_EXPRESSION")) + utils.Info("Backup cron expression: %s", config.cronExpression) utils.Info("Storage type %s ", storage) //Test database connexion testDatabaseConnection(db) - utils.Info("Creating a new cron instance...") + utils.Info("Creating cron instance...") // Create a new cron instance c := cron.New() - // Add a cron job that runs every 10 seconds - c.AddFunc(config.cronExpression, func() { + _, err := c.AddFunc(config.cronExpression, func() { BackupTask(db, config) }) + if err != nil { + return + } // Start the cron scheduler c.Start() - utils.Info("Creating a new cron instance...done") + utils.Info("Creating cron instance...done") defer c.Stop() select {} } diff --git a/pkg/scripts.go b/pkg/scripts.go deleted file mode 100644 index cac17a8..0000000 --- a/pkg/scripts.go +++ /dev/null @@ -1,71 +0,0 @@ -// Package pkg / -/***** -@author Jonas Kaninda -@license MIT License -@Copyright © 2024 Jonas Kaninda -**/ -package pkg - -import ( - "fmt" - "github.com/jkaninda/mysql-bkup/utils" - "os" - "os/exec" -) - -func CreateCrontabScript(disableCompression bool, storage string) { - //task := "/usr/local/bin/backup_cron.sh" - touchCmd := exec.Command("touch", backupCronFile) - if err := touchCmd.Run(); err != nil { - utils.Fatal("Error creating file %s: %v\n", backupCronFile, err) - } - var disableC = "" - if disableCompression { - disableC = "--disable-compression" - } - - scriptContent := fmt.Sprintf(`#!/usr/bin/env bash -set -e -/usr/local/bin/mysql-bkup backup --dbname %s --storage %s %v -`, os.Getenv("DB_NAME"), storage, disableC) - - if err := utils.WriteToFile(backupCronFile, scriptContent); err != nil { - utils.Fatal("Error writing to %s: %v\n", backupCronFile, err) - } - - chmodCmd := exec.Command("chmod", "+x", "/usr/local/bin/backup_cron.sh") - if err := chmodCmd.Run(); err != nil { - utils.Fatal("Error changing permissions of %s: %v\n", backupCronFile, err) - } - - lnCmd := exec.Command("ln", "-s", "/usr/local/bin/backup_cron.sh", "/usr/local/bin/backup_cron") - if err := lnCmd.Run(); err != nil { - utils.Fatal("Error creating symbolic link: %v\n", err) - - } - - touchLogCmd := exec.Command("touch", cronLogFile) - if err := touchLogCmd.Run(); err != nil { - utils.Fatal("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 { - utils.Fatal("Error creating file %s: %v\n", cronJob, err) - } - - cronContent := fmt.Sprintf(`%s root exec /bin/bash -c ". /run/supervisord.env; /usr/local/bin/backup_cron.sh >> %s" -`, os.Getenv("BACKUP_CRON_EXPRESSION"), cronLogFile) - - if err := utils.WriteToFile(cronJob, cronContent); err != nil { - utils.Fatal("Error writing to %s: %v\n", cronJob, err) - } - utils.ChangePermission("/etc/cron.d/backup_cron", 0644) - - crontabCmd := exec.Command("crontab", "/etc/cron.d/backup_cron") - if err := crontabCmd.Run(); err != nil { - utils.Fatal("Error updating crontab: ", err) - } - utils.Info("Backup job created.") -} diff --git a/utils/constant.go b/utils/constant.go index 84421e5..9a7183f 100644 --- a/utils/constant.go +++ b/utils/constant.go @@ -7,10 +7,10 @@ package utils const RestoreExample = "mysql-bkup restore --dbname database --file db_20231219_022941.sql.gz\n" + - "bkup restore --dbname database --storage s3 --path /custom-path --file db_20231219_022941.sql.gz" + "restore --dbname database --storage s3 --path /custom-path --file db_20231219_022941.sql.gz" const BackupExample = "mysql-bkup backup --dbname database --disable-compression\n" + - "mysql-bkup backup --dbname database --storage s3 --path /custom-path --disable-compression" + "backup --dbname database --storage s3 --path /custom-path --disable-compression" const MainExample = "mysql-bkup backup --dbname database --disable-compression\n" + - "mysql-bkup backup --dbname database --storage s3 --path /custom-path\n" + - "mysql-bkup restore --dbname database --file db_20231219_022941.sql.gz" + "backup --dbname database --storage s3 --path /custom-path\n" + + "restore --dbname database --file db_20231219_022941.sql.gz"