Files
Varaverk/unRAID Essentials/clear_logs.sh
T
2026-03-27 16:50:20 +00:00

122 lines
3.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"