#!/bin/bash set -e # ---------------------------------------------------------------------------------------------- # ------------- Clear Unraid system logs and Docker container logs safely ---------------------- # ---------------------------------------------------------------------------------------------- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../Master.conf" source "$SCRIPT_DIR/../common.sh" parse_args "$@" # STATUS MODE if [[ "$SHOW_STATUS" == true ]]; then echo echo "==================================================" echo " โ„น๏ธ LOG CLEANER STATUS" echo "--------------------------------------------------" echo " ๐Ÿ“„ System Logs: ${LOG_FILES[*]}" echo " ๐Ÿณ Docker Logs: /var/lib/docker/containers" echo " ๐Ÿงช Dry Run: $DRY_RUN" echo "==================================================" exit 0 fi # CONFIG LOG_FILES=("${LOG_FILES[@]:-/var/log/syslog /var/log/messages /var/log/dmesg}") # ROOT CHECK if [[ "$EUID" -ne 0 ]]; then error "๐Ÿ”ด Must be run as root" fi # HEADER echo echo "============================================================" echo " ๐Ÿš€ LOG CLEANER STARTING" echo "------------------------------------------------------------" echo " ๐Ÿ“„ System Logs: ${LOG_FILES[*]}" echo " ๐Ÿณ Docker Logs: enabled" echo " ๐Ÿงช Dry Run: $DRY_RUN" echo "============================================================" log "โ„น๏ธ Starting log cleanup" # FUNCTIONS clear_file() { local file="$1" if [[ ! -f "$file" ]]; then warn "๐ŸŸก Not found: $file" return fi if [[ "$DRY_RUN" == true ]]; then warn "๐Ÿงช Would clear: $file" else : > "$file" info "๐ŸŸข Cleared: $file" fi } clear_docker_logs() { if [[ ! -d /var/lib/docker/containers ]]; then warn "๐ŸŸก Docker directory not found โ€” skipping" return fi local files files=$(find /var/lib/docker/containers/ -name "*-json.log" 2>/dev/null || true) if [[ -z "$files" ]]; then warn "๐ŸŸก No Docker logs found" return fi for file in $files; do if [[ "$DRY_RUN" == true ]]; then warn "๐Ÿงช Would clear Docker log: $file" else : > "$file" info "๐ŸŸข Cleared Docker log: $file" fi done } # EXECUTION START_TIME=$(date +%s) for log in "${LOG_FILES[@]}"; do clear_file "$log" done clear_docker_logs END_TIME=$(date +%s) DURATION=$((END_TIME - START_TIME)) # SUMMARY echo echo "============================================================" if [[ "$DRY_RUN" == true ]]; then echo " ๐ŸŸก LOG CLEANER SUMMARY" echo "------------------------------------------------------------" echo " ๐Ÿ“„ Logs: ${LOG_FILES[*]}" echo " ๐Ÿณ Docker: skipped (dry run)" echo " ๐Ÿ“ก Status: ๐ŸŸก DRY RUN" else echo " ๐ŸŸข LOG CLEANER SUMMARY" echo "------------------------------------------------------------" echo " ๐Ÿ“„ Logs: ${LOG_FILES[*]}" echo " ๐Ÿณ Docker: cleaned" echo " โฑ Duration: ${DURATION}s" echo " ๐Ÿ“ก Status: ๐ŸŸข SUCCESS" fi echo "============================================================" info "โ„น๏ธ Log cleanup complete"