Add docs for all files in /misc

This commit is contained in:
Michel Roegl-Brunner
2025-10-10 11:18:59 +02:00
parent b006c4f74b
commit 960fddb9ee
19 changed files with 7095 additions and 0 deletions

View File

@@ -0,0 +1,625 @@
# 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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```bash
#!/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
```