Ich habe ein Bash-Skript, das ein Programm ausführt, um einige Daten zu migrieren. Dies schlägt ungefähr 30-40% der Zeit fehl.Einen spezifischen Fehler abfangen und Script erneut versuchen? - BASH
Ich möchte eine Möglichkeit, das Skript erneut zu versuchen, wenn dieser bestimmte Fehler auftritt, aber ich möchte nur 3 mal versuchen, bevor es scheitert.
Das Skript gibt die folgenden, wenn es fehlschlägt:
Error: The connection to the remote server has timed out, no changes have been committed. (#134 - scope: ajax_verify_connection_to_remote_site)
Edit: Um genauer zu sein ....
migration.sh:
#!/bin/bash
various other scripts........
sudo a_broken_migration_program <Variables>
ich broken_migration wollen mehrmals wiederholen, idealerweise nur dann, wenn es scheitert mit diesem spezifischen Fehler, aber wenn das zu kompliziert ist, werde ich mich damit begnügen, alle Fehler erneut zu versuchen.
In meinem Kopf würde ich vorschlagen, dass Sie Ihre Haupt-Migrationslogik in eine Bash-Funktion in Ihrem Skript einfügen. Die Funktion kann den Beendigungscode des tatsächlichen Migrationsprozesses zurückgeben, und Sie können eine einfache Schleife mit einem Limit von 3 erstellen, um den Aufruf der Funktion zu wiederholen. – Lix
"Wiederholen ... wenn dieser spezielle Fehler auftritt". Sie sind also glücklich, weiterzumachen, wenn andere Fehler auftreten? Kennen Sie den Rückkehrcode der Shells, der in '$?' Gespeichert ist, ist er 0, wenn er OK ist, und eine Zahl ungleich null, wenn irgendein Fehler aufgetreten ist. Alle guten Befehle sollten diese Konvention einhalten. Wie es ist, ist dieses Q zu Brett, und viele werden stimmen, um zu schließen. Wir müssen einen Code sehen, der das Problem spezifischer und testbarer macht. Viel Glück. – shellter
@shellter: Ich möchte mit allen Fehlern aufhören, außer diesem speziellen Fehler, der sehr häufig ist. Aus irgendeinem Grund schlägt dieses Migrationstool ziemlich oft fehl, aber im zweiten oder dritten Durchlauf wird es perfekt abgeschlossen. Als zu breit zu sein, ich weiß nicht, wie ich genauer sein kann ..... Ich habe ein Programm aus einem Shell-Skript ausgeführt. Ich möchte diesen spezifischen Fehler abfangen und es erneut versuchen. Ich werde meinen Beitrag aktualisieren, um es klarer zu machen .... – James