Ich verwende einen benutzerdefinierten Linux-Computer, daher sind nicht alle Linux-Befehle verfügbar .
Ich führe netzwerkbezogene Befehle aus, daher muss ich unmittelbar vor dem Ausführen meines Befehls ein Standard-Gateway festlegen und dieses Gateway anschließend sofort entfernen.
Dazu führe ich alle meine Befehle in einer Zeile aus:
/sbin/route add default gw 10.10.10.10;my command;/sbin/route del default gw 10.10.10.10;
Das Problem ist, dass ich aus irgendeinem Grund einmal zwei Standard-Gateways auf demselben Computer gefunden habe, bei denen alle meine Befehle fehlgeschlagen sind. Selbst wenn ich mein Standard-Gateway vor dem Ausführen meines Tests festgelegt habe, ist es immer noch durcheinander und kann meinen Test nicht ausführen.
Gibt es eine Möglichkeit , ALLE Standardgateways mit einem Befehl zu entfernen ? Ich habe eine große Anzahl von Maschinen, die zunehmen, und es ist nicht praktisch, auf jeder Maschine ein Skript zu platzieren. Ich brauche einen einfachen Befehl wie den folgenden:
/sbin/route del all default;set my default gw;mycommand;/sbin/route del all default;
Alles, was ich bisher gefunden habe, ist ein Befehl zum Entfernen eines Standard-Gateways, aber nicht alle,
/sbin/route del default
die für mich nicht funktionieren.
/sbin/route
Die Hilfe zeigt Folgendes an
/sbin/route --help
Usage: route [{add|del|delete}]
Edit the kernel's routing tables
Options:
-n Don't resolve names
-e Display other/more information
-A inet Select address family
Zum Entfernen aller Standardgateways verwenden Sie
ip
quelle
Wenn Ihr Code mit mehreren Standardgateways nicht funktioniert, sollten Sie wahrscheinlich auch mehrere IP-Adressen pro Gerät angeben.
Da Sie bereits eine Antwort erhalten haben, ist dies ein anderer Ansatz, da Sie die Konfiguration Ihres Systems NIEMALS ändern sollten , nur weil Sie ein Skript ausführen / testen möchten. Wie wäre es stattdessen mit Netzwerk-Namespaces. Eine kurze Einführung zum Hinzufügen virtueller Geräte zu Ihrem NS (Namespace) finden Sie unter http://code.google.com/p/coreemu/wiki/Namespaces .
Führen Sie einfach den folgenden Befehl aus, um einen Namespace namens test zu erstellen und einen Befehl unter diesem Namespace auszuführen
Dabei kann BEFEHL beispielsweise Ihre Shell oder nur das Serverskript sein.
quelle
Alle Antworten sind großartig, aber ich habe dieses Problem mit einem anderen Ansatz gelöst. Ich habe den Befehl verwendet, um nur ein Standard-Gateway hinzuzufügen, aber es schlägt fehl, wenn es bereits eines gibt. Und damit eventuell das falsche Gateway am Ende des Befehls entfernen. Dies sollte beim zweiten Mal funktionieren.
ip route add default via my-gateway
ip route del default
quelle