fix: Offense-Cleanup-Worker mit niedrigster CPU/IO-Priorität ausführen
This commit is contained in:
@@ -1271,8 +1271,8 @@ start_offense_cleanup_worker() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "INFO" "Starte Offense-Cleanup-Worker im Hintergrund..."
|
log "INFO" "Starte Offense-Cleanup-Worker im Hintergrund (nice 19, idle I/O)..."
|
||||||
bash "$worker_script" start &
|
nice -n 19 ionice -c 3 bash "$worker_script" start &
|
||||||
OFFENSE_CLEANUP_WORKER_PID=$!
|
OFFENSE_CLEANUP_WORKER_PID=$!
|
||||||
log "INFO" "Offense-Cleanup-Worker gestartet (PID: $OFFENSE_CLEANUP_WORKER_PID)"
|
log "INFO" "Offense-Cleanup-Worker gestartet (PID: $OFFENSE_CLEANUP_WORKER_PID)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ Das ermöglicht:
|
|||||||
├── external-blocklist-worker.sh # Externer Blocklist-Worker
|
├── external-blocklist-worker.sh # Externer Blocklist-Worker
|
||||||
├── external-whitelist-worker.sh # Externer Whitelist-Worker (DNS-Auflösung)
|
├── external-whitelist-worker.sh # Externer Whitelist-Worker (DNS-Auflösung)
|
||||||
├── geoip-worker.sh # GeoIP-Länderfilter-Worker
|
├── geoip-worker.sh # GeoIP-Länderfilter-Worker
|
||||||
├── offense-cleanup-worker.sh # Automatisches Aufräumen abgelaufener Offense-Zähler
|
├── offense-cleanup-worker.sh # Aufräumen abgelaufener Offense-Zähler (nice 19, idle I/O)
|
||||||
├── unban-expired.sh # Cron-basiertes Entsperren
|
├── unban-expired.sh # Cron-basiertes Entsperren
|
||||||
└── geoip/ # Auto-Download MaxMind GeoLite2 DB (optional)
|
└── geoip/ # Auto-Download MaxMind GeoLite2 DB (optional)
|
||||||
|
|
||||||
|
|||||||
@@ -284,7 +284,7 @@ sudo /opt/adguard-shield/geoip-worker.sh flush-cache
|
|||||||
|
|
||||||
## Offense-Cleanup-Worker
|
## Offense-Cleanup-Worker
|
||||||
|
|
||||||
Der Offense-Cleanup-Worker räumt abgelaufene Offense-Zähler (progressive Sperren) automatisch auf. Er startet automatisch mit dem Hauptservice, wenn progressive Sperren aktiviert sind, und prüft stündlich ob Zähler aufgeräumt werden können.
|
Der Offense-Cleanup-Worker räumt abgelaufene Offense-Zähler (progressive Sperren) automatisch auf. Er startet automatisch mit dem Hauptservice, wenn progressive Sperren aktiviert sind, und prüft stündlich ob Zähler aufgeräumt werden können. Der Worker läuft mit niedrigster CPU- und I/O-Priorität (`nice 19`, `ionice idle`), um den DNS-Dienst nicht zu beeinträchtigen.
|
||||||
|
|
||||||
Der Worker kann auch standalone gesteuert werden:
|
Der Worker kann auch standalone gesteuert werden:
|
||||||
|
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ Wiederholungstäter werden wie bei fail2ban stufenweise länger gesperrt. Wird e
|
|||||||
| 4. Mal | 4 | 8 Stunden | 3600 × 8 |
|
| 4. Mal | 4 | 8 Stunden | 3600 × 8 |
|
||||||
| 5. Mal | 5 | **PERMANENT** | Max-Stufe erreicht |
|
| 5. Mal | 5 | **PERMANENT** | Max-Stufe erreicht |
|
||||||
|
|
||||||
> **Hinweis:** Abgelaufene Offense-Zähler werden automatisch vom **Offense-Cleanup-Worker** aufgeräumt, der stündlich prüft, ob das letzte Vergehen einer IP länger als `PROGRESSIVE_BAN_RESET_AFTER` zurückliegt. Der Worker startet automatisch zusammen mit dem Hauptservice, wenn progressive Sperren aktiviert sind. Manuelles Zurücksetzen ist jederzeit mit `reset-offenses` möglich. Permanente Sperren werden **nicht** automatisch aufgehoben – sie müssen manuell mit `unban` oder `flush` entfernt werden.
|
> **Hinweis:** Abgelaufene Offense-Zähler werden automatisch vom **Offense-Cleanup-Worker** aufgeräumt, der stündlich prüft, ob das letzte Vergehen einer IP länger als `PROGRESSIVE_BAN_RESET_AFTER` zurückliegt. Der Worker startet automatisch zusammen mit dem Hauptservice, wenn progressive Sperren aktiviert sind. Er läuft mit niedrigster CPU- und I/O-Priorität (`nice 19`, `ionice idle`), sodass andere Dienste nicht beeinträchtigt werden. Manuelles Zurücksetzen ist jederzeit mit `reset-offenses` möglich. Permanente Sperren werden **nicht** automatisch aufgehoben – sie müssen manuell mit `unban` oder `flush` entfernt werden.
|
||||||
|
|
||||||
### Logging
|
### Logging
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
#
|
#
|
||||||
# Autor: Patrick Asmus
|
# Autor: Patrick Asmus
|
||||||
# E-Mail: support@techniverse.net
|
# E-Mail: support@techniverse.net
|
||||||
# Datum: 2026-04-14
|
# Datum: 2026-04-16
|
||||||
# Lizenz: MIT
|
# Lizenz: MIT
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
@@ -25,6 +25,12 @@ fi
|
|||||||
# shellcheck source=adguard-shield.conf
|
# shellcheck source=adguard-shield.conf
|
||||||
source "$CONFIG_FILE"
|
source "$CONFIG_FILE"
|
||||||
|
|
||||||
|
# ─── Niedrigste Priorität setzen (CPU + I/O) ─────────────────────────────────
|
||||||
|
# Stellt sicher, dass der Worker auch bei manuellem Start nie andere Dienste
|
||||||
|
# verdrängt. nice 19 = niedrigste CPU-Priorität, ionice idle = nur bei freier I/O.
|
||||||
|
renice -n 19 $$ >/dev/null 2>&1 || true
|
||||||
|
ionice -c 3 -p $$ >/dev/null 2>&1 || true
|
||||||
|
|
||||||
# ─── Worker PID-File ──────────────────────────────────────────────────────────
|
# ─── Worker PID-File ──────────────────────────────────────────────────────────
|
||||||
WORKER_PID_FILE="/var/run/adguard-offense-cleanup-worker.pid"
|
WORKER_PID_FILE="/var/run/adguard-offense-cleanup-worker.pid"
|
||||||
|
|
||||||
@@ -80,6 +86,7 @@ cleanup_expired_offenses() {
|
|||||||
now=$(date '+%s')
|
now=$(date '+%s')
|
||||||
local cleaned=0
|
local cleaned=0
|
||||||
|
|
||||||
|
local batch_count=0
|
||||||
for offense_file in "${STATE_DIR}"/*.offenses; do
|
for offense_file in "${STATE_DIR}"/*.offenses; do
|
||||||
[[ -f "$offense_file" ]] || continue
|
[[ -f "$offense_file" ]] || continue
|
||||||
|
|
||||||
@@ -101,6 +108,12 @@ cleanup_expired_offenses() {
|
|||||||
rm -f "$offense_file"
|
rm -f "$offense_file"
|
||||||
cleaned=$((cleaned + 1))
|
cleaned=$((cleaned + 1))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Alle 10 Dateien kurz pausieren, um I/O-Bursts zu vermeiden
|
||||||
|
batch_count=$((batch_count + 1))
|
||||||
|
if (( batch_count % 10 == 0 )); then
|
||||||
|
sleep 0.1
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ $cleaned -gt 0 ]]; then
|
if [[ $cleaned -gt 0 ]]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user