Fix hybrid backups to run full backup when triggered manually
PROBLEM: - User configured hybrid backup mode (files + block device) - Manual "Run backup now" only did file backup, not block device - Block device backups only ran on Sunday (day 7) - User couldn't test full backup without waiting until Sunday SOLUTION: - Modified backup.sh to accept optional "yes" argument to force full backup - Created new systemd service: pbs-backup-manual.service - Calls backup.sh with "yes" argument - Forces both file AND block device backup regardless of day - Updated backup script logic: - If FORCE_FULL="yes" -> always do block device backup - Else if Sunday -> do block device backup - Else -> skip block device backup - Updated both manual backup triggers: - Post-install "Run backup now" prompt - Menu option 4 "Run backup now" - Both now use pbs-backup-manual.service BEHAVIOR: - Scheduled backups (via timer): Files daily, block device weekly on Sunday - Manual backups (via menu): Files + block device ALWAYS (full backup) FILES CHANGED: - Added FORCE_FULL parameter to backup.sh - Modified "both" case to check FORCE_FULL first - Created pbs-backup-manual.service systemd unit - Updated run_backup_now() to use manual service - Updated menu option 4 handler to use manual service 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
801b8649ba
commit
f88cba76bb
1 changed files with 40 additions and 16 deletions
|
|
@ -784,6 +784,9 @@ EOF
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Check if forcing full backup (for manual runs)
|
||||
FORCE_FULL="${1:-no}"
|
||||
|
||||
# Load configuration
|
||||
source /etc/proxmox-backup-client/config
|
||||
|
||||
|
|
@ -884,13 +887,16 @@ case "$BACKUP_TYPE" in
|
|||
both)
|
||||
# Do file backup first (faster, more frequent)
|
||||
backup_files || BACKUP_SUCCESS=false
|
||||
|
||||
# Only do block device backup on Sunday (weekly)
|
||||
if [ "$(date +%u)" -eq 7 ]; then
|
||||
|
||||
# Do block device backup on Sunday OR if manually forced
|
||||
if [ "$FORCE_FULL" = "yes" ]; then
|
||||
log "Manual full backup - including block device"
|
||||
backup_block_device || BACKUP_SUCCESS=false
|
||||
elif [ "$(date +%u)" -eq 7 ]; then
|
||||
log "Weekly block device backup day (Sunday)"
|
||||
backup_block_device || BACKUP_SUCCESS=false
|
||||
else
|
||||
log "Skipping block device backup (runs weekly on Sunday)"
|
||||
log "Skipping block device backup (runs weekly on Sunday, or use 'Run backup now' for immediate full backup)"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
|
|
@ -917,7 +923,7 @@ EOFSCRIPT
|
|||
|
||||
chmod 700 "$CONFIG_DIR/backup.sh"
|
||||
|
||||
# Create systemd service file
|
||||
# Create systemd service file (for scheduled backups)
|
||||
cat > /etc/systemd/system/pbs-backup.service <<EOF
|
||||
[Unit]
|
||||
Description=Proxmox Backup Client Backup
|
||||
|
|
@ -934,7 +940,25 @@ SyslogIdentifier=pbs-backup
|
|||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
|
||||
# Create systemd service file for manual full backups
|
||||
cat > /etc/systemd/system/pbs-backup-manual.service <<EOF
|
||||
[Unit]
|
||||
Description=Proxmox Backup Client Manual Full Backup
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=$CONFIG_DIR/backup.sh yes
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
SyslogIdentifier=pbs-backup
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# Create systemd timer file
|
||||
cat > /etc/systemd/system/pbs-backup.timer <<EOF
|
||||
[Unit]
|
||||
|
|
@ -967,11 +991,11 @@ run_backup_now() {
|
|||
RUN_NOW=$(prompt "Do you want to run a backup now? (yes/no)" "no")
|
||||
|
||||
if [[ "$RUN_NOW" == "yes" ]]; then
|
||||
log "Starting immediate backup..."
|
||||
log "Starting immediate FULL backup (files + block device)..."
|
||||
echo
|
||||
|
||||
# Start the backup
|
||||
systemctl start pbs-backup.service
|
||||
# Start the manual backup (forces full backup)
|
||||
systemctl start pbs-backup-manual.service
|
||||
|
||||
# Wait a moment for service to start
|
||||
sleep 1
|
||||
|
|
@ -985,7 +1009,7 @@ run_backup_now() {
|
|||
|
||||
# Monitor backup in background and kill journalctl when done
|
||||
(
|
||||
while systemctl is-active --quiet pbs-backup.service; do
|
||||
while systemctl is-active --quiet pbs-backup-manual.service; do
|
||||
sleep 2
|
||||
done
|
||||
# Service finished, kill the journal follow
|
||||
|
|
@ -1004,7 +1028,7 @@ run_backup_now() {
|
|||
echo "════════════════════════════════════════════════════════════"
|
||||
|
||||
# Check final status
|
||||
if systemctl status pbs-backup.service | grep -q "Active: failed"; then
|
||||
if systemctl status pbs-backup-manual.service | grep -q "Active: failed"; then
|
||||
echo
|
||||
error "Backup failed!"
|
||||
else
|
||||
|
|
@ -1122,11 +1146,11 @@ main() {
|
|||
# Continue to interactive_config below
|
||||
;;
|
||||
4)
|
||||
info "Running backup now..."
|
||||
info "Running FULL backup now (files + block device)..."
|
||||
echo
|
||||
|
||||
# Start the backup
|
||||
systemctl start pbs-backup.service
|
||||
# Start the manual backup (forces full backup)
|
||||
systemctl start pbs-backup-manual.service
|
||||
|
||||
# Wait a moment for service to start
|
||||
sleep 1
|
||||
|
|
@ -1140,7 +1164,7 @@ main() {
|
|||
|
||||
# Monitor backup in background and kill journalctl when done
|
||||
(
|
||||
while systemctl is-active --quiet pbs-backup.service; do
|
||||
while systemctl is-active --quiet pbs-backup-manual.service; do
|
||||
sleep 2
|
||||
done
|
||||
# Service finished, kill the journal follow
|
||||
|
|
@ -1159,7 +1183,7 @@ main() {
|
|||
echo "════════════════════════════════════════════════════════════"
|
||||
|
||||
# Check final status
|
||||
if systemctl status pbs-backup.service | grep -q "Active: failed"; then
|
||||
if systemctl status pbs-backup-manual.service | grep -q "Active: failed"; then
|
||||
echo
|
||||
error "Backup failed!"
|
||||
echo
|
||||
|
|
|
|||
Loading…
Reference in a new issue