apiVersion: batch/v1 kind: CronJob metadata: name: hourly-backup namespace: oil-calculator spec: schedule: "0 * * * *" # Every hour successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 2 jobTemplate: spec: template: spec: containers: - name: backup image: registry.oci.euphon.net/oil-calculator:latest command: - sh - -c - | BACKUP_DIR=/data/backups mkdir -p $BACKUP_DIR DATE=$(date +%Y%m%d_%H%M%S) # Backup SQLite database using .backup for consistency sqlite3 /data/oil_calculator.db ".backup '$BACKUP_DIR/oil_calculator_${DATE}.db'" echo "Backup done: $BACKUP_DIR/oil_calculator_${DATE}.db ($(du -h $BACKUP_DIR/oil_calculator_${DATE}.db | cut -f1))" # Keep last 48 backups (2 days of hourly) ls -t $BACKUP_DIR/oil_calculator_*.db | tail -n +49 | xargs rm -f 2>/dev/null echo "Backups retained: $(ls $BACKUP_DIR/oil_calculator_*.db | wc -l)" volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: claimName: oil-calculator-data restartPolicy: OnFailure imagePullSecrets: - name: regcred