Current File : //usr/../opt/managed_servers/python/../scripts/backup_age.sh
readonly BACKUP_AGE_DATA="${BACKGROUND_DATA}/backup_age_check.data";
readonly BACKUP_ADVANCED_AGE="backup has been performed too long ago";
readonly CPBKP_LOG_LOW_DISK="Available disk space \([0-9]+ percent\) is too low. Backups will not run.";
readonly CPBKP_LOG_NO_SPACE="No space left on device";
readonly CPBKP_OK="Daily backup is Ok";
readonly CPBKP_LOG_PARTIAL_FAIL="Final state is Backup::PartialFailure";
readonly CPBKP_LOG_FAIL="Backup::Failure";
readonly BACKUP_NO_LOGS="There are no backups logfiles";
readonly BACKUP_IN_PROGRESS="backup_in_progress";
readonly BACKUP_STARTED="backup_started";
readonly BACKUP_AGE_CHECK_ERRORS="${BACKGROUND_DATA}/backup_age_check.errors";
readonly BACKUP_SCHEDULED="backup scheduled for today";
readonly CPBKP_DISABLED="BACKUPENABLE: 'no'"
backup_schedule_check(){
local bkp_conf="/var/cpanel/backups/config";
local daily_days=$(grep BACKUPDAYS $bkp_conf);
local weekly_days=$(grep BACKUP_WEEKLY_DAY $bkp_conf);
local monthly_days="$(grep BACKUP_MONTHLY_DATES $bkp_conf | cut -d: -f2 | tr ',' ' ')";
local week_day=$(date +%w);
local month_day=$(date +%e);
if [[ $daily_days =~ $week_day || $weekly_days =~ $week_day ]]; then
return 1; # Skip backup forcing
fi;
for mday in $monthly_days; do
if [[ $mday =~ $month_day ]]; then
return 1; # Skip backup forcing
fi;
done;
return 0; # The new backup creation can be forced
}
start_bkp() {
# Fix to:
# local backup_force_msg=$(/usr/local/cpanel/bin/backup --force 2>&1);
# local backup_force_return_code=$?;
# local bkp_start_fail_low_disk="Available disk space \(\d+ percent\) is too low\.";
# if [[ $backup_status -ne 0 ]]; then
# if $(grep -qP "$p" <<< "$backup_force_msg"); then
# # Failed to start the new backup process
# backup_age_check_data[service_status]=$SERVICE_DOWN;
# backup_age_check_data[backup_status]=$(base64 -w0 <<< "$backup_force_msg");
/usr/local/cpanel/bin/backup --force 1>/dev/null 2>&1;
backup_status=$?;
last_bkp_log=$(find /usr/local/cpanel/logs/cpbackup/ -type f -printf "%T@ %p\n" | sort -n |
tail -1 | cut -d' ' -f2);
if [[ $backup_status -ne 0 ]]; then
# Failed to start the new backup process
backup_age_check_data[service_status]=$SERVICE_DOWN;
if [[ -z $last_bkp_log ]]; then
backup_age_check_data[backup_status]=$(base64 -w0 <<< "$BACKUP_NO_LOGS");
else
# Provide a path to the last backup log
backup_age_check_data[backup_status]=$(base64 -w0 <<< "$last_bkp_log");
fi;
else
backup_age_check_data[service_status]=$BACKUP_STARTED;
backup_age_check_data[auto_fix_status]=$AUTO_FIX_NOPE;
backup_age_check_data[log_file]="$last_bkp_log";
fi;
}
force_new_bkp(){
local backup_status;
backup_schedule_check;
backup_status=$?;
# Start a new backup creation if there are no backup logs
if [[ -z $last_bkp_log && backup_status -eq 0 ]]; then
start_bkp;
# Manual check required if the last backup has failed for unknown reasons
elif [[ -n $(grep -oE -e "$CPBKP_LOG_LOW_DISK" -e "$CPBKP_LOG_FAIL" -e "$CPBKP_LOG_PARTIAL_FAIL" -e "$CPBKP_LOG_NO_SPACE" "$last_bkp_log" 2>/dev/null) ]]; then
backup_age_check_data[backup_status]=$(tail -20 "$last_bkp_log" | base64 -w0);
backup_age_check_data[service_status]=$SERVICE_DOWN;
elif [[ "$(ps aux | grep -e pkgacct -e "/bin/backup" | grep -e "/backup/" -e "backup --force")" ]]; then
# The backup creation is already in progress
backup_age_check_data[service_status]=$BACKUP_IN_PROGRESS;
backup_age_check_data[auto_fix_status]=$AUTO_FIX_NOPE;
backup_age_check_data[log_file]="$last_bkp_log";
elif [[ $backup_status -ne 0 ]]; then
backup_age_check_data[service_status]=$SERVICE_ACTIVE;
backup_age_check_data[backup_status]=$(base64 -w0 <<< "$BACKUP_SCHEDULED");
else
start_bkp;
fi;
}
backup_age_check_main(){
declare -A backup_age_check_data;
backup_age_check_data[nagios_data]="$(/usr/local/nagios/plugins/check_newbackup -v)";
local last_bkp_log=$(find /usr/local/cpanel/logs/cpbackup/ -type f -printf "%T@ %p\n" | sort -n |
tail -1 | cut -d' ' -f2);
if [[ $(grep "$CPBKP_DISABLED" /var/cpanel/backups/config) ]]; then
backup_age_check_data[service_status]=$SERVICE_DISABLED;
# Temporarily disabled, to prevent automatic acknowledge, such cases should be checked manually, in case
# backups were disabled by a mistake.
# backup_age_check_data[auto_fix_status]=$AUTO_FIX_NOPE;
elif [[ ${backup_age_check_data[nagios_data]} =~ $CPBKP_OK && -z $(grep -oP "$CPBKP_LOG_LOW_DISK" "$last_bkp_log") ]]; then
backup_age_check_data[service_status]=$SERVICE_ACTIVE;
elif [[ ${backup_age_check_data[nagios_data]} =~ $BACKUP_ADVANCED_AGE || ${backup_age_check_data[nagios_data]} =~ $BACKUP_NO_LOGS ]]; then
force_new_bkp;
else
# Provide some context as to why backup has failed
backup_age_check_data[backup_status]=$(tail -20 "$last_bkp_log" | base64 -w0);
backup_age_check_data[service_status]=$SERVICE_DOWN;
fi;
unset backup_age_check_data[script_status];
bash_arr_to_json backup_age_check_data ${!backup_age_check_data[@]} > "$BACKUP_AGE_DATA";
}
backup_age_check(){
run_check_in_background "backup_age_check_main" "$BACKUP_AGE_DATA" "$BACKUP_AGE_CHECK_ERRORS"\
"${CHECK_LOCKS_DIR}/${FUNCNAME}.lock";
}