SirBarry Geschrieben 9. Oktober 2003 Teilen Geschrieben 9. Oktober 2003 Servus, ich hab jetzt grad schon das ganze Forum durchgeforstet und bin noch zu keinem Ergebnis gekommen. Weiß jemand wie man unter DOS eine Abfrage schreibt die z.B. in einer IF-Abfrage herausfindet ob der Befehl "mysqladmin status" einen bestimmten Wert zurückgibt, bzw. ob der mysqld läuft oder nicht? Wenn ja, soll der Befehl "mysqladmin shutdown" ausgeführt werden und anschließend immer die "start.exe" aufrufen. Das Ganze natürlich in ne Batch-Datei oder EXE packen. Bin grad dabei einen CD-ROM-Webserver lauffähig zu machen, allerdings beendet sich dieser MySQL-Prozess oft nicht von alleine und das hat unter Win98 die übelsten Folgen wenn ich dann den Prozess nochmal starte indem ich die start.exe nochmal aufrufe. Danke schon mal für eure Hilfe. Viele Grüße... SirBarry :marine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FinalFantasy Geschrieben 10. Oktober 2003 Teilen Geschrieben 10. Oktober 2003 Also mir fallen da spontan zwei Möglichkeiten ein: 1. Wenn du es aus einem C-Programm mit der System() Funktion aufrufst, kriegst du als Returnwert den DOS-ErrorLevel zurück. Wäre dann nur noch rauszufinden, was für welche, bzw ob dein Befehl die DOS-ErrorLevel überhaupt setzt. 2. Du könntest den Befehl mit dem Output Operator (>) aufrufen, so dass die Ausgaben des Programms in eine Datei geschrieben werden, und diese dann mit einem C-Programm parsen. Man kann den Returnwert auch sicher irgendwie in der Shell abfragen, aber da ist mir leider nichts bekannt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ingh Geschrieben 10. Oktober 2003 Teilen Geschrieben 10. Oktober 2003 Es sollte mittels find auch einfacher gehen: mysqladmin status > %temp%\status.txt find "Suchstring" < %temp%\status.txt if errorlevel 1 goto ende rem wenn der Suchstring nicht gefunden wurde, gibt find einen Fehlercode >=1 zurück; dann zum Ende springen rem Jetzt die Aktionen, wenn der Suchstring gefunden wurde: mysqladmin shutdown start.exe :ende Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SirBarry Geschrieben 10. Oktober 2003 Autor Teilen Geschrieben 10. Oktober 2003 Hmm, hab jetzt mal die DOS-Variante getestet. Scheint auf den ersten Blick zu funktionieren. Aber die Datei status.txt wird ja IMMER erstellt und verfehlt dann doch ihren Zweck, richtig? Das sollte doch auch gehen wenn ich einfach mysqladmin status schreibe und dann die IF-Abfrage mache. Da sollte ja auch so einen Errorlevel geschrieben werden, oder? Beim ersten Mal bekomme ich übrigens immer ne Fehlermeldung. Can't connect usw... Hab schon versucht mit @echo off Fehlermeldungen zu unterdrücken, aber das geht scheinbar nicht, oder doch? Danke schon mal für eure ersten Hilfen. SirBarry :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SirBarry Geschrieben 10. Oktober 2003 Autor Teilen Geschrieben 10. Oktober 2003 Noch was: dieser mysqladmin Befehl lässt sich nur ausführen wenn der Webserver an sich läuft, sprich die start.exe ausgeführt wurde. Ansonsten gibts ne Fehlermeldung, Die soll übrigens am Schluss immer in jedemfall gestartet werden, lediglich der mysqld muss irgendwie beendet werden, falls er läuft, bevor man die start.exe startet. So isses vielleicht ein bisschen klarer!? SirBarry () :marine () ----------- Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 10. Oktober 2003 Teilen Geschrieben 10. Oktober 2003 Hallo, Die Fehlermeldung wird wahrscheinlich auf stderror ausgebene, echo off bezieht sich aber nur auf stdout. Der ERRORLEVEL wird mit dem return-Wert von externen Programmen gesetzt, welcher Wert das konkret ist, hängt von dem aufgerufenen Programm ab und sollte dementsprechend dort in der Manual-Page oder Beschreibung stehen (alternativ kannst Du ihn Dir auch testweise durch deine Batch-Datei ausgeben lassen). Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FinalFantasy Geschrieben 10. Oktober 2003 Teilen Geschrieben 10. Oktober 2003 also ich weiss nicht ob dir das wirklich hilft, aber wenn du in der Shell einen Dateinamen eingibst, z.B. c:\test.txt, aber die Datei nicht existiert, dann wird der errorlevel auf 9009 gesetzt. Aber wenn die Datei immer erzeugt wird, bringt dir das ja auch nichts. Aber mit find suchst du ja einen String in einem File. Du kannst also mit find überprüfen, ob in der Datei auch drinsteht, dass er heruntergefahren ist. Insofern sollte das dann (theoretisch) schon funktionieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ingh Geschrieben 10. Oktober 2003 Teilen Geschrieben 10. Oktober 2003 stimmt, du könntest die Erstellung der Datei umgehen, indem du direkt find "xyz" < mysqladmin status if errorlevel.... machst. Der "Umweg" über die Datei wird erst nötig, wenn du die Ausgabe nacheinender auf mehrere Suchstrings überprüfen willst. So könntest du aber anhand der Ausgabe (bzw. der Fehlermeldung) unterscheiden, ob der Webserver läuft: mysqladmin status > %temp%\status.txt find "Alles-OK-Meldung" < %temp%\status.txt if errorlevel 1 goto ende rem alles ok find "Fehlermeldung" < %temp%\status.txt if errorlevel 1 goto webstart rem wenn der Fehlermeldung nicht erkannt wurde, läuft der mysqld und muss beendet werden rem ansonsten wird der Befehl zum Beenden übersprungen mysqladmin shutdown :webstart start.exe :ende echo off schaltet übrigens nicht die Fehlermeldungen ab, sondern bewirkt, dass die Zeilen deiner Batchdatei beim Abarbeiten nicht (zusätzlich zu den normalen Programmausgaben) angezeigt werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.