In einer Shell kann es vorkommen, dass ein Programm warten muss / soll, bis das
Vorherige beendet ist.
In meinem Fall war es so, dass ich zuerst fail2ban stoppen wollte,
um danach die Firewall ohne die temporären Einträge von f2b zu sichern.
Somit musste „iptables-save“ warten, bis fail2ban fertig mit „austragen“ der bans war.
Das kann mitunter schon mal länger dauern, wenn f2b viele Einträge gefunden hat,
die alle aus iptables wieder ausgetragen werden müssen.
Hier hatte ich den Fehler gemacht, sleep 120 (Sekunden) zu verwenden, doch sleep 120 wartet
einfach nur 120 Sekunden und macht dann weiter, egal ob der Task vorher zu Ende war…
Fatal, wenn f2b aber noch gar nicht fertig war…
wait ist eindeutig die bessere Lösung!
Hier das zuerst falsche Beispiel: (Ich dachte, ich käme mit 120 Sekunden warten aus)
/etc/init.de/fail2ban stop
sleep 120
iptables-save > backup.ipt
Richtig ist es so:
/etc/init.de/fail2ban stop
wait
iptables-save > backup.ipt
Das geht übrigens auch mit Hintergrundprozessen:
/etc/init.de/fail2ban stop &
[1] 27400
weiterer_befehl_in_den_hintergrund &
[2] 27401
wait %1 %2
iptables-save > backup.ipt
hier sorgt wait dafür dass BEIDE Hintergrundprozesse erst abgearbeitet werden.
Zum Vergleich:
sleep x – wartet x Sekunden, dann macht die shell weiter
wait – wartet auf den letzten Prozess, bis der abgeschlossen ist.
Views: 19