Some checks failed
Bump build.func Revision / bump-revision (push) Has been cancelled
12 KiB
12 KiB
error_handler.func Usage Examples
Overview
This document provides practical usage examples for error_handler.func
functions, covering common scenarios, integration patterns, and best practices.
Basic Error Handling Setup
Standard Script Initialization
#!/usr/bin/env bash
# Standard error handling setup
# Source error handler
source error_handler.func
# Initialize error handling
catch_errors
# Your script code here
# All errors will be automatically caught and handled
echo "Script running..."
apt-get update
apt-get install -y package
echo "Script completed successfully"
Minimal Error Handling
#!/usr/bin/env bash
# Minimal error handling setup
source error_handler.func
catch_errors
# Simple script with error handling
echo "Starting operation..."
command_that_might_fail
echo "Operation completed"
Error Code Explanation Examples
Basic Error Explanation
#!/usr/bin/env bash
source error_handler.func
# Explain common error codes
echo "Error 1: $(explain_exit_code 1)"
echo "Error 127: $(explain_exit_code 127)"
echo "Error 130: $(explain_exit_code 130)"
echo "Error 200: $(explain_exit_code 200)"
Error Code Testing
#!/usr/bin/env bash
source error_handler.func
# Test all error codes
test_error_codes() {
local codes=(1 2 126 127 128 130 137 139 143 100 101 255 200 203 204 205)
for code in "${codes[@]}"; do
echo "Code $code: $(explain_exit_code $code)"
done
}
test_error_codes
Custom Error Code Usage
#!/usr/bin/env bash
source error_handler.func
# Use custom error codes
check_requirements() {
if [[ ! -f /required/file ]]; then
echo "Error: Required file missing"
exit 200 # Custom error code
fi
if [[ -z "$CTID" ]]; then
echo "Error: CTID not set"
exit 203 # Custom error code
fi
if [[ $CTID -lt 100 ]]; then
echo "Error: Invalid CTID"
exit 205 # Custom error code
fi
}
check_requirements
Signal Handling Examples
Interrupt Handling
#!/usr/bin/env bash
source error_handler.func
# Set up interrupt handler
trap on_interrupt INT
echo "Script running... Press Ctrl+C to interrupt"
sleep 10
echo "Script completed normally"
Termination Handling
#!/usr/bin/env bash
source error_handler.func
# Set up termination handler
trap on_terminate TERM
echo "Script running... Send SIGTERM to terminate"
sleep 10
echo "Script completed normally"
Complete Signal Handling
#!/usr/bin/env bash
source error_handler.func
# Set up all signal handlers
trap on_interrupt INT
trap on_terminate TERM
trap on_exit EXIT
echo "Script running with full signal handling"
sleep 10
echo "Script completed normally"
Cleanup Examples
Lock File Cleanup
#!/usr/bin/env bash
source error_handler.func
# Set up lock file
lockfile="/tmp/my_script.lock"
touch "$lockfile"
# Set up exit handler
trap on_exit EXIT
echo "Script running with lock file..."
sleep 5
echo "Script completed - lock file will be removed"
Temporary File Cleanup
#!/usr/bin/env bash
source error_handler.func
# Create temporary files
temp_file1="/tmp/temp1.$$"
temp_file2="/tmp/temp2.$$"
touch "$temp_file1" "$temp_file2"
# Set up cleanup
cleanup() {
rm -f "$temp_file1" "$temp_file2"
echo "Temporary files cleaned up"
}
trap cleanup EXIT
echo "Script running with temporary files..."
sleep 5
echo "Script completed - temporary files will be cleaned up"
Debug Logging Examples
Basic Debug Logging
#!/usr/bin/env bash
source error_handler.func
# Enable debug logging
export DEBUG_LOGFILE="/tmp/debug.log"
catch_errors
echo "Script with debug logging"
apt-get update
apt-get install -y package
Debug Log Analysis
#!/usr/bin/env bash
source error_handler.func
# Enable debug logging
export DEBUG_LOGFILE="/tmp/debug.log"
catch_errors
# Function to analyze debug log
analyze_debug_log() {
if [[ -f "$DEBUG_LOGFILE" ]]; then
echo "Debug log analysis:"
echo "Total errors: $(grep -c "ERROR" "$DEBUG_LOGFILE")"
echo "Recent errors:"
tail -n 5 "$DEBUG_LOGFILE"
else
echo "No debug log found"
fi
}
# Run script
echo "Running script..."
apt-get update
# Analyze results
analyze_debug_log
Silent Execution Integration
With core.func Silent Execution
#!/usr/bin/env bash
source core.func
source error_handler.func
# Silent execution with error handling
echo "Installing packages..."
silent apt-get update
silent apt-get install -y nginx
echo "Configuring service..."
silent systemctl enable nginx
silent systemctl start nginx
echo "Installation completed"
Silent Execution Error Handling
#!/usr/bin/env bash
source core.func
source error_handler.func
# Function with silent execution and error handling
install_package() {
local package="$1"
echo "Installing $package..."
if silent apt-get install -y "$package"; then
echo "$package installed successfully"
return 0
else
echo "Failed to install $package"
return 1
fi
}
# Install multiple packages
packages=("nginx" "apache2" "mysql-server")
for package in "${packages[@]}"; do
if ! install_package "$package"; then
echo "Stopping installation due to error"
exit 1
fi
done
Advanced Error Handling Examples
Conditional Error Handling
#!/usr/bin/env bash
source error_handler.func
# Conditional error handling based on environment
setup_error_handling() {
if [[ "${STRICT_MODE:-0}" == "1" ]]; then
echo "Enabling strict mode"
export STRICT_UNSET=1
fi
catch_errors
echo "Error handling configured"
}
setup_error_handling
Error Recovery
#!/usr/bin/env bash
source error_handler.func
# Error recovery pattern
retry_operation() {
local max_attempts=3
local attempt=1
while [[ $attempt -le $max_attempts ]]; do
echo "Attempt $attempt of $max_attempts"
if silent "$@"; then
echo "Operation succeeded on attempt $attempt"
return 0
else
echo "Attempt $attempt failed"
((attempt++))
if [[ $attempt -le $max_attempts ]]; then
echo "Retrying in 5 seconds..."
sleep 5
fi
fi
done
echo "Operation failed after $max_attempts attempts"
return 1
}
# Use retry pattern
retry_operation apt-get update
retry_operation apt-get install -y package
Custom Error Handler
#!/usr/bin/env bash
source error_handler.func
# Custom error handler for specific operations
custom_error_handler() {
local exit_code=${1:-$?}
local command=${2:-${BASH_COMMAND:-unknown}}
case "$exit_code" in
127)
echo "Custom handling: Command not found - $command"
echo "Suggestions:"
echo "1. Check if the command is installed"
echo "2. Check if the command is in PATH"
echo "3. Check spelling"
;;
126)
echo "Custom handling: Permission denied - $command"
echo "Suggestions:"
echo "1. Check file permissions"
echo "2. Run with appropriate privileges"
echo "3. Check if file is executable"
;;
*)
# Use default error handler
error_handler "$exit_code" "$command"
;;
esac
}
# Set up custom error handler
trap 'custom_error_handler' ERR
# Test custom error handling
nonexistent_command
Integration Examples
With build.func
#!/usr/bin/env bash
# Integration with build.func
source core.func
source error_handler.func
source build.func
# Container creation with error handling
export APP="plex"
export CTID="100"
# Errors will be caught and explained
# Silent execution will use error_handler for explanations
With tools.func
#!/usr/bin/env bash
# Integration with tools.func
source core.func
source error_handler.func
source tools.func
# Tool operations with error handling
# All errors are properly handled and explained
With api.func
#!/usr/bin/env bash
# Integration with api.func
source core.func
source error_handler.func
source api.func
# API operations with error handling
# Network errors and API errors are properly handled
Best Practices Examples
Comprehensive Error Handling
#!/usr/bin/env bash
# Comprehensive error handling example
source error_handler.func
# Set up comprehensive error handling
setup_comprehensive_error_handling() {
# Enable debug logging
export DEBUG_LOGFILE="/tmp/script_debug.log"
# Set up lock file
lockfile="/tmp/script.lock"
touch "$lockfile"
# Initialize error handling
catch_errors
# Set up signal handlers
trap on_interrupt INT
trap on_terminate TERM
trap on_exit EXIT
echo "Comprehensive error handling configured"
}
setup_comprehensive_error_handling
# Script operations
echo "Starting script operations..."
# ... script code ...
echo "Script operations completed"
Error Handling for Different Scenarios
#!/usr/bin/env bash
source error_handler.func
# Different error handling for different scenarios
handle_package_errors() {
local exit_code=$1
case "$exit_code" in
100)
echo "Package manager error - trying to fix..."
apt-get --fix-broken install
;;
101)
echo "Configuration error - checking sources..."
apt-get update
;;
*)
error_handler "$exit_code"
;;
esac
}
handle_network_errors() {
local exit_code=$1
case "$exit_code" in
127)
echo "Network command not found - checking connectivity..."
ping -c 1 8.8.8.8
;;
*)
error_handler "$exit_code"
;;
esac
}
# Use appropriate error handler
if [[ "$1" == "package" ]]; then
trap 'handle_package_errors $?' ERR
elif [[ "$1" == "network" ]]; then
trap 'handle_network_errors $?' ERR
else
catch_errors
fi
Error Handling with Logging
#!/usr/bin/env bash
source error_handler.func
# Error handling with detailed logging
setup_logging_error_handling() {
# Create log directory
mkdir -p /var/log/script_errors
# Set up debug logging
export DEBUG_LOGFILE="/var/log/script_errors/debug.log"
# Set up silent logging
export SILENT_LOGFILE="/var/log/script_errors/silent.log"
# Initialize error handling
catch_errors
echo "Logging error handling configured"
}
setup_logging_error_handling
# Script operations with logging
echo "Starting logged operations..."
# ... script code ...
echo "Logged operations completed"
Troubleshooting Examples
Debug Mode
#!/usr/bin/env bash
source error_handler.func
# Enable debug mode
export DEBUG_LOGFILE="/tmp/debug.log"
export STRICT_UNSET=1
catch_errors
echo "Debug mode enabled"
# Script operations
Error Analysis
#!/usr/bin/env bash
source error_handler.func
# Function to analyze errors
analyze_errors() {
local log_file="${1:-$DEBUG_LOGFILE}"
if [[ -f "$log_file" ]]; then
echo "Error Analysis:"
echo "Total errors: $(grep -c "ERROR" "$log_file")"
echo "Error types:"
grep "ERROR" "$log_file" | awk '{print $NF}' | sort | uniq -c
echo "Recent errors:"
tail -n 10 "$log_file"
else
echo "No error log found"
fi
}
# Run script with error analysis
analyze_errors
Error Recovery Testing
#!/usr/bin/env bash
source error_handler.func
# Test error recovery
test_error_recovery() {
local test_cases=(
"nonexistent_command"
"apt-get install nonexistent_package"
"systemctl start nonexistent_service"
)
for test_case in "${test_cases[@]}"; do
echo "Testing: $test_case"
if silent $test_case; then
echo "Unexpected success"
else
echo "Expected failure handled"
fi
done
}
test_error_recovery