|
seackone |

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 30.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.12.2013, 15:02
Titel: Ping-Abfrage in Linux
|
 |
Hallo!
Mein kleines Skript greift auf eine Webseite zu, um sich von dort Messwerte zu beschaffen. Nun möchte ich beim Starten meines Skriptes zunächst prüfen, ob diese Webseite überhaupt verfügbar ist. Ich habe das mit einem einfachen Ping-Befehl realisiert. Vorher erfolgt eine Betriebssystemabfrage, da der Befehl sich zwischen Mac bzw. Linux und Windows leicht unterscheidet.
Nun sieht das Ganze etwa so aus (Beispiel jetzt einfach mal mit Ping an google):
Ich habe noch nie mit Unix gearbeitet, der Befehl sollte aber der Gleiche sein wie bei Mac. Jetzt ist es allerdings so, falls google unter Windows nicht angepingt werden kann, ist status=1. Für den gleichen Fall unter Mac ist status=2. Leider konnte ich für Unix nicht testen.. Wäre dort status (wie bei Mac) auch 2, falls kein Echo empfangen werden kann?
Viele Grüße
|
|
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.12.2013, 15:25
Titel:
|
 |
Siehe z.B: http://linux.die.net/man/8/ping
Zitat: |
If ping does not receive any reply packets at all it will exit with code 1. If a packet count and deadline are both specified, and fewer than count packets are received by the time the deadline has arrived, it will also exit with code 1. On other error it exits with code 2. Otherwise it exits with code 0. This makes it possible to use the exit code to see if a host is alive or not. |
Wobei Du Mac und Unix ohne weiteres zusammenfassen kannst, da OS-X seit ein paar Jahren auf Unix aufbaut.
|
|
|
seackone |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 30.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.12.2013, 16:25
Titel:
|
 |
Vielen Dank für deine Antwort. Dann sollte demnach "status" auf 1 gesetzt werden, sobald kein Echo empfangen wird. Eigentlich wie bei Windows.. Dann muss ich nachher nochmal schauen, warum "status" bei Mac auf 2 gesetzt wurde als ich keine Antwort erhalten habe. Dachte einfach da würde sich Mac von Windows unterscheiden.
|
|
|
seackone |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 30.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.12.2013, 17:40
Titel:
|
 |
So nun habe ich doch nochmal geschaut. Also unter Mac heist es:
Zitat: |
0 At least one response was heard from the specified host.
2 The transmission was successful but no responses were received. |
Bei Windows gibt es anscheinend nur 0 und 1 für erfolgreich bzw. fehlgeschlagen. Bei Linux allerdings 0 für erfolgreich, 1 für fehlgeschlagen und 2 für einen anderen Fehler.
Wenn ich das richtig verstehe müsste ich unter Linux dann eine 1 erhalten, wenn ich nur die Anzahl der zu senden Pakete definiere und alle verloren gehen, also wenn die Seite nicht erreichbar ist. Aber unterscheidet sich ja dann doch wieder von Mac oder begreife ich irgendwas nicht?
Gruß
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.12.2013, 12:02
Titel:
|
 |
Es ist doch ganz einfach: Bei 0 hat es funktioniert, sonst nicht.
|
|
|
seackone |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 30.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.12.2013, 14:46
Titel:
|
 |
Meine Frage war allerdings nicht bei welchem Exitcode es funktioniert, sondern welchen Exitcode ich erhalte wenn ich kein Echo empfange. Bei PC sollte es eine 1 sein, Mac eine 2 und bei Unix (falls ich es richtig verstanden habe) wieder eine 1. Du sagtest ich kann Unix und Mac zusammenfassen. Anscheinend ja dann doch nicht. Was ist nun richtig?
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.12.2013, 16:25
Titel:
|
 |
Du siehst selbst, je nach verwendetem ping-Programm kann es unterschiedliche Exitcodes geben. Zum Beispiel 68 für unknown host.
Also je nach Fehler gibt es irgendeinen Exitcode ungleich 0.
|
|
|
seackone |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 30.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.12.2013, 17:13
Titel:
|
 |
Richtig. Nun habe ich allerdings etwas anderes vor. Und zwar möchte ich 2 Seiten anpingen und wenn mindestens 1 Echo empfangen wurde, kann das Skript fortgeführt werden.
Daher dachte ich mir das etwa so:
Daher wär es nun schön zu wissen was Unix nun ausspuckt wenn kein Echo empfangen wird. Anhand deines zitierten Textes würde ich auf 1 Tippen..
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.01.2014, 11:39
Titel:
|
 |
Plus ist die falsche Operation:
|
|
|
seackone |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 30.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.01.2014, 13:38
Titel:
|
 |
Sehe ich nicht so. Wollte ja den Fall, falls mindestens eine Seite angepingt werden kann. Bei einem & müssen ja beide Seiten anpingbar sein.
Aber nun nochmal, ist ja doch eine recht einfache Frage: Welchen Wert hat mein Echo unter Unix wenn eine Seite nicht anpingbar ist?
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.01.2014, 16:04
Titel:
|
 |
Zum letzten Mal:
status = 0: anpingbar -> logisch "falsch"
status != 0: nicht anpingbar -> logisch "wahr"
|
|
|
seackone |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 30.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.01.2014, 19:48
Titel:
|
 |
Okay Sirius, ich habe verstanden das du mir Möglichkeiten aufzeigen möchtest, wie das Ganze gelöst werden kann. Mit dem Exit-Code von Unix war auch nur noch interessehalber, da du sagtest Mac basiert auf Unix.
Bei meinem Post mit dem & weis ich auch nicht an was ich da gedacht habe. Jedenfalls nicht an das logische "und". Natürlich hast du recht, dass die Bedingung auf mindestens 1 Echo mit einem & überprüft werden kann.
Hab das jedenfalls jetzt ohne "Betriebssystemabfrage" gelöst, da ich gestern gemerkt habe, dass Matlab7 damit nix anfangen kann.
Sieht jetzt jedenfalls so aus:
Gruß
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 05.01.2014, 22:59
Titel:
|
 |
Hallo seackone,
Ein paar Kommentare:
Matlab 7.0 bis 7.14 kann die Unterscheidung der Betriebssysteme gut umgehen. Wenn estwas nicht wie gewünscht funktioniert, ist das sicherlich ein Programmierfehler.
Ich würde under Linux übrigens eher SYSTEM oder UNIX verwenden, statt DOS, aber es funktioniert zumindest.
In "logical(status1 && status2) == 0" ist die Umwandlung in ein LOGICAL überflüssig.
"logical(status1 && status2) == 0" passt nicht zum Kommentar "Falls mindestens eine Seite angepingt werden konnte." Besser: "if status1 | status2".
Gruß, Jan
|
|
|
seackone |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 30.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.01.2014, 13:06
Titel:
|
 |
|
 |
|
Hallo Jan,
also ich hatte neulich mein Skript bei einem Bekannten mit Matlab 7.1 ausprobiert und dort schien es Probleme mit den Befehlen "ispc", "ismac" und "isunix" zu geben. Allerdings habe ich mich daran jetzt auch nicht großartig aufgehalten, da gab es wichtigere Sachen.
Okay vielen Dank für den Tip. Kenne mich da leider mit den Befehlen unter Unix nicht so sehr aus. Werde ich nachher noch ändern.
Bei dem & wird doch auf das logische "und" zurückgegriffen und laut Wahrheitstabelle:
0 0 -> 0
0 1 -> 0
1 0 -> 0
1 1 -> 1
sollte das doch funktionieren. Da hatte ich meinen Gedankenfehler 2 Posts zuvor, als ich schrieb:
Zitat: |
Wollte ja den Fall, falls mindestens eine Seite angepingt werden kann. Bei einem & müssen ja beide Seiten anpingbar sein. |
Das ist natürlich quatsch. Sobald ich von beiden Seiten kein Echo empfangen (seite1 = 1 und seite2 = 1) wird, startet die else-Anweisung. Bei mindestens einem Echo ist die if-Bedingung erfüllt.
Die Wandlung in Logical ist etwas unschön, ich weis. Bei status1 und status2 handelt es sich um skalare Größen. Mit nur einem & dazwischen erhalte ich eine Warnung:
"Use && insted of & as the AND operator in (scalar) conditional statements."
Ich kann natürlich die Warnung ignorieren und erspare mir die Wandlung in Logical, oder ich packe ein zweites & dazu und muss diese eben noch für die if-Abfrage machen.
Weis jetzt nicht was eleganter gelöst ist, aber denke auch letztendlich egal.
Falls ich immernoch irgendwo Verständnisprobleme haben sollte, dann bitte ich um Berichtigung
Gruß
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|