#!/usr/bin/env python3 import subprocess import datetime import pathlib import sys import os # ================= CONFIG ================= SCRIPT_DIR = pathlib.Path(__file__).resolve().parent SCRIPTS = [ SCRIPT_DIR / "backup_configs.sh", SCRIPT_DIR / "backup_home.sh", SCRIPT_DIR / "backup_vms.sh", ] LOG_DIR = SCRIPT_DIR / "job-runner" # ========================================== def timestamp(): return datetime.datetime.now().strftime("%Y%m%d_%H%M%S") def safe_name(path): return pathlib.Path(path).stem def run_script(script_path, run_ts): name = safe_name(script_path) out_file = pathlib.Path(LOG_DIR) / f"{name}_{run_ts}.out" err_file = pathlib.Path(LOG_DIR) / f"{name}_{run_ts}.err" with open(out_file, "wb") as out, open(err_file, "wb") as err: proc = subprocess.Popen( ["/bin/bash", str(script_path)], stdout=out, stderr=err, env={ "PATH": "/usr/sbin:/usr/bin:/bin", "LANG": "C", }, ) return proc.wait() def main(): os.makedirs(LOG_DIR, exist_ok=True) run_ts = timestamp() for script in SCRIPTS: if not os.path.isfile(script) or not os.access(script, os.X_OK): print(f"ERROR: Script not executable: {script}", file=sys.stderr) sys.exit(1) rc = run_script(script, run_ts) if rc != 0: print(f"ERROR: {script} failed with exit code {rc}", file=sys.stderr) sys.exit(rc) sys.exit(0) if __name__ == "__main__": main()