diff --git a/usr/local/bin/custom/poe.sh b/usr/local/bin/custom/poe.sh index 57fbe1b..e2f58b9 100644 --- a/usr/local/bin/custom/poe.sh +++ b/usr/local/bin/custom/poe.sh @@ -87,23 +87,45 @@ EOF echo "" > "$LOGFILE" +MAX_PARALLEL=10 # maximal gleichzeitig laufende Geräte + while true; do echo "--------------------------------------------------------------------" >> "$LOGFILE" python3 /srv/poe_manager/generate_ips.py | while IFS=: read -r rpi_ip dev_name switch_ip switch_hostname switch_port switch_user switch_pass; do - if ping -c 2 -W 1 "$rpi_ip" &> /dev/null; then - echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name ist erreichbar!" >> "$LOGFILE" - else - echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name ist nicht erreichbar!" >> "$LOGFILE" + # Funktion für ein Gerät + check_device() { + local rpi_ip="$1" + local dev_name="$2" + local switch_ip="$3" + local switch_hostname="$4" + local switch_port="$5" + local switch_user="$6" + local switch_pass="$7" - # Nur PoE neu starten, wenn Port vorhanden ist - if [ -n "$switch_port" ] && [ "$switch_port" != "None" ]; then - disable_poe "$switch_ip" "$switch_port" "$switch_user" "$switch_pass" - echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name PoE auf Port $switch_port am Switch $switch_hostname deaktiviert." >> "$LOGFILE" - sleep 2 - enable_poe "$switch_ip" "$switch_port" "$switch_user" "$switch_pass" - echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name PoE auf Port $switch_port am Switch $switch_hostname aktiviert." >> "$LOGFILE" + if ping -c 4 -W 1 "$rpi_ip" &> /dev/null; then + echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name ist erreichbar!" >> "$LOGFILE" + else + echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name ist nicht erreichbar!" >> "$LOGFILE" + + if [ -n "$switch_port" ] && [ "$switch_port" != "None" ]; then + disable_poe "$switch_ip" "$switch_port" "$switch_user" "$switch_pass" + echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name PoE auf Port $switch_port am Switch $switch_hostname deaktiviert." >> "$LOGFILE" + sleep 2 + enable_poe "$switch_ip" "$switch_port" "$switch_user" "$switch_pass" + echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name PoE auf Port $switch_port am Switch $switch_hostname aktiviert." >> "$LOGFILE" + fi fi - fi + } + + # Job in Hintergrund starten + check_device "$rpi_ip" "$dev_name" "$switch_ip" "$switch_hostname" "$switch_port" "$switch_user" "$switch_pass" & + + # Limit auf MAX_PARALLEL Jobs + while [ "$(jobs -rp | wc -l)" -ge "$MAX_PARALLEL" ]; do + sleep 0.2 + done done + + wait # alle Hintergrundjobs beenden, bevor sleep sleep "$SLEEP" done