summaryrefslogtreecommitdiffstats
path: root/backup/src/main.rs
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2025-04-12 14:25:11 +0200
committerLeonard Kugis <leonard@kug.is>2025-04-12 14:25:11 +0200
commite33322d98311ab7cfebe85e2cc7f57fabee87461 (patch)
tree29b438d4e1905e9bf72f16e7956147ee2d2adec6 /backup/src/main.rs
parent632e2a5a020764fb3c544f592b5fe66cc055c44a (diff)
downloadscripts-e33322d98311ab7cfebe85e2cc7f57fabee87461.tar.gz
Split up config file
Diffstat (limited to 'backup/src/main.rs')
-rw-r--r--backup/src/main.rs51
1 files changed, 28 insertions, 23 deletions
diff --git a/backup/src/main.rs b/backup/src/main.rs
index d2210af..272c952 100644
--- a/backup/src/main.rs
+++ b/backup/src/main.rs
@@ -1,9 +1,9 @@
use chrono::Local;
+use clap::Parser;
use duct::cmd;
use regex::Regex;
use serde::Deserialize;
use std::{
- env,
error::Error,
fs::{self, File},
io::{BufRead, BufReader},
@@ -52,16 +52,15 @@ fn get_backup_number(backup_dir: &Path) -> Result<u32, Box<dyn Error>> {
}
fn main() -> Result<(), Box<dyn Error>> {
- let base_dir = PathBuf::from("/root/scripts");
- let config_path = base_dir.join("config.json");
- let config_str = fs::read_to_string(&config_path)?;
+ let args = Args::parse();
+ let config_str = fs::read_to_string(&args.config)?;
let config: Config = serde_json::from_str(&config_str)?;
- let backup_dir = Path::new(&config.backup.backup_dir);
- let rotate_dir = Path::new(&config.backup.rotate_dir);
- let timestamp_file = Path::new(&config.backup.timestamp_file);
- let source_list = read_lines(&config.backup.source_file)?;
- let exclude_list = read_lines(&config.backup.exclude_file)?;
+ let backup_dir = Path::new(&config.backup_dir);
+ let rotate_dir = Path::new(&config.rotate_dir);
+ let timestamp_file = Path::new(&config.timestamp_file);
+ let source_list = read_lines(&config.source_file)?;
+ let exclude_list = read_lines(&config.exclude_file)?;
fs::create_dir_all(backup_dir)?;
@@ -69,8 +68,8 @@ fn main() -> Result<(), Box<dyn Error>> {
for s in &source_list {
if Path::new(s).exists() {
source_paths.push(s.clone());
- } else {
- eprintln!("Warnung: '{}' existiert nicht", s);
+ } else if args.verbose {
+ eprintln!("WARNING: '{}' existiert nicht", s);
}
}
@@ -78,13 +77,13 @@ fn main() -> Result<(), Box<dyn Error>> {
for e in &exclude_list {
if Path::new(e).exists() {
exclude_args.push(format!("--exclude={}", e));
- } else {
- eprintln!("Warnung: '{}' existiert nicht", e);
+ } else if args.verbose {
+ eprintln!("WARNING: '{}' existiert nicht", e);
}
}
let mut backup_nr = get_backup_number(backup_dir)? + 1;
- if backup_nr > 30 {
+ if backup_nr > config.cycles.unwrap_or(30) {
backup_nr = 1;
let now = Local::now();
@@ -97,19 +96,27 @@ fn main() -> Result<(), Box<dyn Error>> {
fs::rename(entry.path(), dest)?;
}
- // pg_dumpall via duct (ähnlich wie Bash pipe)
- let dump1 = rotate_subdir.join("backup_mastodon-db-1.sql.zst");
- let dump2 = rotate_subdir.join("backup_db.sql.zst");
+ if args.verbose {
+ println!("INFO: Backup-Rotation durchgeführt");
+ }
+ // Dump 1
+ let dump1 = rotate_subdir.join("backup_mastodon-db-1.sql.zst");
cmd!("docker", "exec", "mastodon-db-1", "pg_dumpall", "-U", "postgres")
.pipe(cmd!("zstd", "-9"))
.stdout_file(File::create(dump1)?)
.run()?;
+ // Dump 2
+ let dump2 = rotate_subdir.join("backup_db.sql.zst");
cmd!("pg_dumpall", "-U", "postgres")
.pipe(cmd!("zstd", "-9"))
.stdout_file(File::create(dump2)?)
.run()?;
+
+ if args.verbose {
+ println!("INFO: Datenbank-Dumps gespeichert");
+ }
}
let backup_filename = format!("backup-{:02}.tar.zst", backup_nr);
@@ -134,15 +141,13 @@ fn main() -> Result<(), Box<dyn Error>> {
let tar_status = tar_cmd.status()?;
if !tar_status.success() {
- return Err("Fehler beim Erstellen des Tar-Backups".into());
+ return Err("ERROR: Fehler beim Erstellen des Tar-Backups".into());
}
// Log-Dateien behandeln
- cmd!("find", "/var/log", "-type", "f", "-name", "*.log", "-exec", "truncate", "-s", "0", "{}", ";")
- .run()?;
- cmd!("find", "/var/log", "-type", "f", "-name", "*.gz", "-exec", "rm", "-f", "{}", ";")
- .run()?;
+ cmd!("find", "/var/log", "-type", "f", "-name", "*.log", "-exec", "truncate", "-s", "0", "{}", ";").run()?;
+ cmd!("find", "/var/log", "-type", "f", "-name", "*.gz", "-exec", "rm", "-f", "{}", ";").run()?;
- println!("Backup erfolgreich als {}", backup_path.display());
+ println!("INFO: Backup erfolgreich als: {}", backup_path.display());
Ok(())
}