-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup-backup-cron.sh
More file actions
executable file
·163 lines (139 loc) · 4.39 KB
/
setup-backup-cron.sh
File metadata and controls
executable file
·163 lines (139 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/bin/bash
set -euo pipefail
# === CONFIGURATION ===
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKUP_SCRIPT="$SCRIPT_DIR/wp-backup.sh"
CRON_USER="$USER"
# === USAGE FUNCTION ===
usage() {
cat << EOF
Usage: $0 [OPTIONS]
Setup automated WordPress backups using cron jobs.
OPTIONS:
-h, --help Show this help message
-u, --user USER User to run cron jobs as (default: current user)
-w, --weekly Setup weekly backups (default)
-c, --cleanup Remove existing backup cron jobs
-l, --list List current backup cron jobs
EXAMPLES:
$0 # Setup weekly backups (default)
$0 -w # Setup weekly backups
$0 -c # Remove all backup cron jobs
$0 -l # List current backup cron jobs
EOF
}
# === VARIABLES ===
FREQUENCY="weekly"
CLEANUP=false
LIST_JOBS=false
# === PARSE ARGUMENTS ===
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
usage
exit 0
;;
-u|--user)
CRON_USER="$2"
shift 2
;;
-w|--weekly)
FREQUENCY="weekly"
shift
;;
-c|--cleanup)
CLEANUP=true
shift
;;
-l|--list)
LIST_JOBS=true
shift
;;
*)
error_exit "Unknown option: $1"
;;
esac
done
# === ERROR HANDLING ===
error_exit() {
echo "ERROR: $1" >&2
exit 1
}
# === VALIDATION ===
if [ ! -f "$BACKUP_SCRIPT" ]; then
error_exit "Backup script not found: $BACKUP_SCRIPT"
fi
if [ ! -x "$BACKUP_SCRIPT" ]; then
error_exit "Backup script is not executable: $BACKUP_SCRIPT"
fi
# === LIST CURRENT JOBS ===
if [ "$LIST_JOBS" = true ]; then
echo "Current backup cron jobs for user '$CRON_USER':"
if [ "$CRON_USER" = "$USER" ]; then
crontab -l 2>/dev/null | grep -E "(wp-backup|wordpress.*backup)" || echo " No backup cron jobs found"
else
sudo -u "$CRON_USER" crontab -l 2>/dev/null | grep -E "(wp-backup|wordpress.*backup)" || echo " No backup cron jobs found"
fi
exit 0
fi
# === CLEANUP EXISTING JOBS ===
if [ "$CLEANUP" = true ]; then
echo "Removing existing backup cron jobs for user '$CRON_USER'..."
if [ "$CRON_USER" = "$USER" ]; then
crontab -l 2>/dev/null | grep -v -E "(wp-backup|wordpress.*backup)" | crontab -
else
sudo -u "$CRON_USER" crontab -l 2>/dev/null | grep -v -E "(wp-backup|wordpress.*backup)" | sudo -u "$CRON_USER" crontab -
fi
echo "Backup cron jobs removed successfully."
exit 0
fi
# === SETUP CRON JOB ===
echo "Setting up weekly WordPress backups for user '$CRON_USER'..."
# Create backup directory if it doesn't exist
sudo mkdir -p /var/backups/wordpress
sudo chown "$CRON_USER:$CRON_USER" /var/backups/wordpress
# Create log directory if it doesn't exist
sudo mkdir -p /var/log
sudo touch /var/log/wp-backup.log
sudo chown "$CRON_USER:$CRON_USER" /var/log/wp-backup.log
sudo chmod 644 /var/log/wp-backup.log
# Define cron schedule for weekly backups
CRON_SCHEDULE="0 2 * * 0" # Weekly on Sunday at 2:00 AM
# Create cron job entry
CRON_JOB="$CRON_SCHEDULE cd $SCRIPT_DIR && $BACKUP_SCRIPT >> /var/log/wp-backup.log 2>&1"
# Add cron job
if [ "$CRON_USER" = "$USER" ]; then
# Add to current user's crontab
{
crontab -l 2>/dev/null | grep -v -E "(wp-backup|wordpress.*backup)" || true
echo "$CRON_JOB"
} | crontab -
else
# Add to specified user's crontab
{
sudo -u "$CRON_USER" crontab -l 2>/dev/null | grep -v -E "(wp-backup|wordpress.*backup)" || true
echo "$CRON_JOB"
} | sudo -u "$CRON_USER" crontab -
fi
echo "Backup cron job setup successfully!"
echo "Schedule: $CRON_SCHEDULE"
echo "User: $CRON_USER"
echo "Script: $BACKUP_SCRIPT"
echo "Log: /var/log/wp-backup.log"
# Show the current cron jobs
echo ""
echo "Current backup cron jobs:"
if [ "$CRON_USER" = "$USER" ]; then
crontab -l | grep -E "(wp-backup|wordpress.*backup)" || echo " No backup cron jobs found"
else
sudo -u "$CRON_USER" crontab -l | grep -E "(wp-backup|wordpress.*backup)" || echo " No backup cron jobs found"
fi
echo ""
echo "To test the backup manually, run:"
echo " $BACKUP_SCRIPT"
echo ""
echo "To view backup logs, run:"
echo " tail -f /var/log/wp-backup.log"
echo ""
echo "To remove backup cron jobs, run:"
echo " $0 -c"